为什么Html.DisplayFor不在IF语句中时工作?

时间:2015-11-06 15:38:15

标签: asp.net-mvc razor

我在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语句中的那个不会渲染出来。

有人可以解释原因吗?

2 个答案:

答案 0 :(得分:4)

因为您在第二个@之前错过了Html.DisplayFor()。在此上下文中,@指示Razor将以下表达式的结果输出到输出。

答案 1 :(得分:4)

在第一个示例中,Html.DisplayFor(...)@为前缀,告诉Razor视图引擎将结果呈现为HTML。在第二个示例中,您正在调用相同的函数,但对结果不执行任何操作。 (想象一下,如果你说Math.Sqrt(4)而不是......什么,你会得到什么输出。

您可能想要的是强制Razor视图引擎通过切换回“HTML”上下文来呈现您的结果 - 也许是这样:

{
    <text>@Html.DisplayFor(...)</text>
}

<text>是Razor视图引擎识别的特殊伪标记,不会出现在输出HTML中。