从MVC3升级到MVC4后,"元素未关闭"错误

Dre*_*kes 6 .net asp.net-mvc razor asp.net-mvc-4

Razor 2(与MVC4一起提供)似乎与Razor 1(来自MVC3)完全向后兼容.

自升级以来,我发现了一个错误:

"td@Html.Raw(count"元素未关闭.所有元素必须是自动关闭或具有匹配的结束标记.

导致这种情况的代码是:

<td@Html.Raw(count == null ? null : " class='has-item'")>
Run Code Online (Sandbox Code Playgroud)

这是什么解决方案?

Dre*_*kes 14

Razor解析器是为MVC 4重写的,大概是因为:

HTML5规范明确指出支持未封闭的HTML标记,但是Razor v1没有足够先进的解析器来支持它.Razor v2现在支持W3C规范中列出的元素.

这里最简单的解决方案是在@符号前添加一个空格:

<td @Html.Raw(count == null ? null : " class='has-item'")>
Run Code Online (Sandbox Code Playgroud)

但是,使用MVC 4的Razor中的条件属性具有更优雅的语法.

<td class="@(count == null ? null : "has-item")">
Run Code Online (Sandbox Code Playgroud)

当属性值解析为时null,该元素将省略该属性.所以这个标记的输出是:

<td>
Run Code Online (Sandbox Code Playgroud)

...要么...

<td class="has-item">
Run Code Online (Sandbox Code Playgroud)