MVC:为什么它作为表达式而不是代码块工作
MVC: Why does this work as an expression but not as a code block
我是 ASP/MVC 新手。我现在正在使用(和修改)脚手架视图。我有以下简单的代码,工作正常:
<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 的值现在不再显示在视图中(此列中不再显示任何内容)。
我的问题:我做错了什么?
谢谢。
当您使用代码块时,该块内的所有内容都只是常规的 C# 代码。此代码不会自动输出到页面。如果将任何未使用的方法 return 值呈现给页面,那会很混乱,不是吗?
查看您的代码,方法 DisplayFor
returned 类型 MvcHtmlString
的变量,但未在代码的其他任何地方使用,因此被丢弃。
如果你想从代码块中输出一些东西,你需要在它前面加上@
。这告诉 Razor 你明白你在做什么,你想把结果输出到页面。对于您的代码,您可以这样更改代码:
@{
@Html.DisplayFor(modelItem => item.LandId)
}
虽然这个具体概念解释的不是很清楚,你可以看看this article on MSDN,它解释了@
是Razor中的魔法角色
我是 ASP/MVC 新手。我现在正在使用(和修改)脚手架视图。我有以下简单的代码,工作正常:
<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 的值现在不再显示在视图中(此列中不再显示任何内容)。
我的问题:我做错了什么?
谢谢。
当您使用代码块时,该块内的所有内容都只是常规的 C# 代码。此代码不会自动输出到页面。如果将任何未使用的方法 return 值呈现给页面,那会很混乱,不是吗?
查看您的代码,方法 DisplayFor
returned 类型 MvcHtmlString
的变量,但未在代码的其他任何地方使用,因此被丢弃。
如果你想从代码块中输出一些东西,你需要在它前面加上@
。这告诉 Razor 你明白你在做什么,你想把结果输出到页面。对于您的代码,您可以这样更改代码:
@{
@Html.DisplayFor(modelItem => item.LandId)
}
虽然这个具体概念解释的不是很清楚,你可以看看this article on MSDN,它解释了@
是Razor中的魔法角色