我在MVC Razor视图中声明了以下语法:
@{
foreach (var speaker in Model)
{
speaker.Name;
}
}
并收到错误
只有赋值,调用,递增,递减,等待和新对象表达式才能用作语句
我可以通过添加@
speaker.Name;
但为什么呢?对不起,我是Razor的新手,但是当我遇到代码块@ {}
时,为什么我需要再次使用@。即使我没有将它与HTML混合使用?
请帮助。
答案 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;”而不是它的价值