我刚开始使用Razor(第3版)并且很好,但是当你需要使用@符号时,我不明白规则背后的原则。
这是我当前项目的一个例子。
在此代码中:
@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#代码的范围仅在运行时已知,因此这两个示例在结构上是两个步骤发生后(预处理,编译和运行)相同。
答案 0 :(得分:1)
@
用于两个不同的目的:
1-您使用@
字符表示使用Razor启动代码块。这类似于Web窗体中的<% %>
。
2-内联表达式(变量和函数)以@
开头(用于在页面上书写内容)。这类似于Web窗体中的<%: %>
或<% Response.Write() %>
。
在您的代码中,@
之前的if
字符表示代码块的开头。块的结尾是}
块的结束if
。您不需要也不允许@
使用@
之间的任何内容。但是,Html.DisplayFor()
之前的{{1}}用于内联表达式。实际上,你不应该在该行的末尾加上分号,否则分号将显示在页面上的显示名称之后。
请查看此quick reference了解详情。