我在MVC视图中有这段代码:
<div style="">
@Html.DisplayFor(modelItem => item.ContentResourceFile.FileName)
@if (item.ContentResourceFile != null && !string.IsNullOrEmpty(item.ContentResourceFile.FileName))
{
Html.DisplayFor(modelItem => item.ContentResourceFile.FileName);
}
</div>
FileName的第一个DisplayFor可以在结果中显示,但IF语句中的那个不会渲染出来。
有人可以解释原因吗?
答案 0 :(得分:4)
因为您在第二个@
之前错过了Html.DisplayFor()
。在此上下文中,@
指示Razor将以下表达式的结果输出到输出。
答案 1 :(得分:4)
在第一个示例中,Html.DisplayFor(...)
以@
为前缀,告诉Razor视图引擎将结果呈现为HTML。在第二个示例中,您正在调用相同的函数,但对结果不执行任何操作。 (想象一下,如果你说Math.Sqrt(4)
而不是......什么,你会得到什么输出。
您可能想要的是强制Razor视图引擎通过切换回“HTML”上下文来呈现您的结果 - 也许是这样:
{
<text>@Html.DisplayFor(...)</text>
}
<text>
是Razor视图引擎识别的特殊伪标记,不会出现在输出HTML中。