【问题标题】:Razor syntax error "Only assignment, call, increment, decrement, await, and new object expressions can be used as a statement"Razor 语法错误“只有赋值、调用、递增、递减、等待和新对象表达式可以用作语句”
【发布时间】:2014-01-04 14:09:39
【问题描述】:

我在 MVC Razor 视图中声明以下语法:

 @{
    foreach (var speaker in Model)
    {
       speaker.Name;               
    }           
 }

出现错误

只有赋值、调用、递增、递减、等待和新对象表达式可以用作语句

我可以通过添加@speaker.Name; 来更正

但是为什么会这样呢?对不起,我是 Razor 的新手,但是当我在代码块 @ {} 中时,为什么我需要再次使用 @。即使我没有将它与 HTML 混合使用?

请帮忙。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-4 razor razor-2


    【解决方案1】:

    没有@,razor 引擎将speaker.Name; 解释为纯C#——也就是说,只是引用一个属性,但不对它做任何事情——但这不会编译。 在 C# 中,仅引用属性本身而不获取或设置其值的语句是无效的。

    考虑一下这款剃须刀

    @foreach (var speaker in Model)
    {
       var name = speaker.Name;
       @name
    }
    

    第一行是纯 C#。它声明了一个变量name,并用speaker.Name的值初始化它。

    第二行被解释为剃刀打印指令,它在输出中打印name 的值。

    【讨论】:

    • 谢谢,不过我已经在代码块@{}里了,当然是纯C#
    • @haansi 在 C# 中仅引用属性本身而不获取或设置其值的语句是无效的。
    【解决方案2】:

    在 Razor 代码块中,@ 表示将这个值打印出来。在这种特殊情况下,如果没有 @,您并没有告诉 Razor 做任何事情,您只是插入一个属性名称来代替语句。

    这就是为什么@ 在这种情况下会更正。它与“标记代码块”的含义不同。

    作为旁注,您还可以使用@ 来标记文字块:

    @:speaker.Name;
    

    也会“纠正”它,通过打印出字面意思是“speaker.Name;”而不是它的价值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 2015-07-05
      • 2016-06-27
      • 1970-01-01
      • 2020-11-24
      • 1970-01-01
      相关资源
      最近更新 更多