【问题标题】:razor view using @ in ASP.NET在 ASP.NET 中使用 @ 的剃刀视图
【发布时间】:2017-01-22 03:57:59
【问题描述】:

我知道我们使用@符号在 C# 代码和 html 代码之间切换,但是对于下面这样的代码:

@for (int i = 1; i <= 10; i++)
{
    @i
}

为什么我们仍然可以将 @ 放在 i 之前作为 @i?由于这里没有html元素,所以没有切换,i是c#代码,如果我们只使用“i”而不是“@i”,我们应该得到相同的输出吗?

另一个问题是:

@for (int i = 1; i <= 10; i++)
{
    <b>@i</b> 
    if (i % 2 == 0)
    {
        <text> - Even </text>
    }
    else
    {
        <text> - Odd </text>
    }
    <br />
}

为什么我们不需要在if之前放@,因为 if之前表示它是当前的html模式,然后我们需要这样做

@if (i% 2 == 0)
{
   ...
}

【问题讨论】:

  • 除了提供的很好的答案之外,我想添加这个评论:当你是剃刀新手时,你可能会发现有时它很棘手。这是因为它比其他旧语法更聪明。 .. 只需依赖 Visual Studio 格式(颜色、智能感知等),您就会熟悉它

标签: c# asp.net .net razor


【解决方案1】:

在您的第一个示例中,@i 是一个隐式表达式,您告诉 razor 在页面上输出 i 的值。删除 @ 会将其变成 C# 语句,这将是无效的语法。

&lt;b&gt; 标签中的@i 也是一个隐式表达式。

现在for 块内的if 不需要@,因为它位于for 代码块内。如果不是,您需要在它前面添加一个(即@if ...)。

参考资料:

【讨论】:

  • 旁注:您也可以在 C# 代码中到处的变量旁边撒上@ 而不会产生任何影响 - @for(var @i =3;@i&lt;10; @i++) - stackoverflow.com/questions/429529/…... 所以有时 @ 只是“符号”没有任何额外影响(这种情况实际上会影响 Razor 的行为,如答案所示)
【解决方案2】:

在 Razor 视图引擎中,@ 符号用于在 HTML 代码中编写嵌入式 C# 代码,就像混合 C# 和 HTML 代码来呈现模板一样。

问题 1 - 答案

@for (int i = 1; i <= 10; i++)
{
    @i
}

在上面的代码 sn-p 中,HTML 文本将直接放在输出流中,因为它直接在 HTML 中呈现 i 值。

没有@i,代码无效,因为C# 中的i 既不是有效代码,也不是HTML,因此在解析Razor 视图时会出现编译错误。

问题 2 - 答案

@for (int i = 1; i <= 10; i++)
{
    <b>@i</b> 
    if (i % 2 == 0)
    {
        <text> - Even </text>
    }
    else
    {
        <text> - Odd </text>
    }
    <br />
}

Razor 视图引擎足够智能,可以在解析嵌入的 C# 代码时知道它是否有效。

这里发生的情况是,嵌入式代码块在稍后在任何有效的 C# 代码上使用 @ 符号开始时,不需要在其之前再次使用 @ 符号,因为它已经在嵌入式代码块内,现在只需正确关闭 HTML 标记或编写有效的 HTML,Razor 视图引擎就会正确呈现模板。

如果您想在 HTML 元素中呈现 C# 变量,那么您需要再次使用 @ 符号,因为嵌入的代码块在 HTML 标记处中断,然后在该 HTML 元素之后再次继续。

【讨论】:

    【解决方案3】:

    在 Razor 中,@ 用于两种不同的目的:

    • 表示代码块的开始。这类似于 Web 窗体中的 。

    • 表示内联表达式。这类似于 Web 窗体中的 。

    第一个问题
    @for {...} 表示代码块,@i 表示内联表达式, 告诉 razor 在页面上输出 i 的值。
    如果你不在 i 之前放置@,你的代码将变成无效的语法。

    第二个问题
    我们需要在表达式 @i 中将 @ 放在 i 之前,因为它是一个内联表达式,告诉 razor在页面上用粗体字输出i的值。
    但是,在下一条语句中,我们不需要将 @ 放在 if 之前,因为它仍然在代码块中 @for {...}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-12
      • 1970-01-01
      • 2018-10-30
      相关资源
      最近更新 更多