Razor语法错误"只有赋值,调用,递增,递减,等待和新对象表达式才能用作语句"

时间:2013-12-17 00:12:26

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

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

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

并收到错误

  

只有赋值,调用,递增,递减,等待和新对象表达式才能用作语句

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

来更正

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

请帮助。

2 个答案:

答案 0 :(得分:9)

如果没有@,剃刀引擎会将speaker.Name;解释为纯C#,即只是引用一个属性,但不对它做任何事情 - 但是不能编译。 只是简单地引用属性而不获取或设置其值的语句在C#中无效。

考虑一下这把剃须刀

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

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

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

答案 1 :(得分:4)

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

这就是@在这种情况下会纠正的原因。它与“标记代码块”具有不同的含义。

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

@:speaker.Name;

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