【问题标题】:What are the rules for nesting @'s in Razor syntax?在 Razor 语法中嵌套 @ 的规则是什么?
【发布时间】:2014-12-18 13:52:06
【问题描述】:

我刚开始使用 Razor (v3) 还可以,但是我不明白当你需要使用 @ 符号时背后的规则。

这是我当前项目中的一个示例。

在这段代码中:

@if (ViewBag.ForcePublic == null && User.Identity.GetUserId() == @Model.Seller.Id)
        {                              
            <h2>Listing Status</h2>
            switch (Model.Status)
            {

如果我在 switch 语句前面放了一个 @,我会收到一个运行时错误,说我不需要嵌套 @ 符号。

但是,在这段代码中:

@if(!Model.BizAddress.StreetAddress.IsEmpty()) {
                 @Html.DisplayFor(model => model.BizAddress.StreetAddress);
            }

如果我没有在 Html.DisplayFor 前面包含 @ 符号,我不仅不会收到语法错误(正如人们所期望的那样,考虑到上面的示例),我的 StreetAddress 是未打印。相反,它默默地失败了!

我想了解为什么会发生这种情况,这样我就可以避免将来可能导致的细微错误。

我怀疑根本原因与模板(我认为)类似于预处理器步骤这一事实有关,并且 C# 代码的范围仅在运行时才知道,因此这两个示例在结构上是两个步骤发生后相同(预处理、编译和运行)。

【问题讨论】:

    标签: asp.net-mvc razor


    【解决方案1】:

    Razor 中的@ 用于两个不同的目的:

    1- 您使用 Razor 使用 @ 字符表示代码块的开始。这就像 Web 表单中的 &lt;% %&gt;

    2- 内联表达式(变量和函数)以@ 开头(用于在页面上写入内容)。这就像 Web 表单中的 &lt;%: %&gt;&lt;% Response.Write() %&gt;

    在您的代码中,if 之前的 @ 字符表示代码块的开始。块的结尾是if 块的结尾}。您不需要也不允许在两者之间使用@。但是,Html.DisplayFor() 之前的 @ 用于内联表达式。实际上,您不应该在该行的末尾放置分号,否则分号将显示在页面上的显示名称之后。

    查看此quick reference 了解更多详情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-26
      • 2013-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多