我是一名ASP / MVC新手。我现在正在(并修改)一个脚手架View。我有以下简单的代码,工作正常:
<table>
[... table headers not shown here]
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.LandId)
</td>
[... other table cells not shown here]
</tr>
}
</table>
正如我所说,这很好用:在视图中(在相关列中),显示相关项目的属性LandId
的值。
但是现在,让其他代码保持相同,我替换表达式
@Html.DisplayFor(modelItem => item.LandId)
使用包含(仅)表达式的代码块:
@{
Html.DisplayFor(modelItem => item.LandId);
}
显然仍然希望在视图中获得与以前相同的输出。然而,令我惊讶的是,LandId的值现在不再显示在视图中(此列中不再显示任何内容)。
我的问题:我在这里做错了什么?
感谢。
答案 0 :(得分:3)
当您使用代码块时,该块内的所有内容都只是常规的C#代码。此代码不会自动输出到页面。如果将任何未使用的方法返回值呈现给页面,那将会非常混乱,不是吗?
查看代码,方法DisplayFor
返回了MvcHtmlString
类型的变量,但是代码中的其他地方没有使用它,所以它被丢弃了。
如果要从代码块输出内容,则需要在其前面添加@
。这告诉Razor你了解自己在做什么,并希望将结果输出到页面。如果是您的代码,您可以更改代码:
@{
@Html.DisplayFor(modelItem => item.LandId)
}
虽然没有非常清楚地解释这个具体概念,但你可以看一下this article on MSDN,它解释了@
是如何成为剃刀中的神奇角色。