Razor 2(随MVC4一起发布)似乎与Razor 1(来自MVC3)不完全向后兼容。
升级后,我发现了一个错误:
"td@Html.Raw(count" 元素未关闭。所有元素必须是自闭合的或具有匹配的结束标记。
导致此问题的代码如下:
<td@Html.Raw(count == null ? null : " class='has-item'")>
这个问题有什么解决办法?
Razor 2(随MVC4一起发布)似乎与Razor 1(来自MVC3)不完全向后兼容。
升级后,我发现了一个错误:
"td@Html.Raw(count" 元素未关闭。所有元素必须是自闭合的或具有匹配的结束标记。
导致此问题的代码如下:
<td@Html.Raw(count == null ? null : " class='has-item'")>
HTML5规范明确说明支持未关闭的HTML标签,但Razor v1没有足够先进的解析器来支持此功能。 Razor v2现在支持W3C规范中列出的这些元素。
这里最简单的解决方案是在@
符号前添加一个空格:
<td @Html.Raw(count == null ? null : " class='has-item'")>
<td class="@(count == null ? null : "has-item")">
null
时,该属性将从元素中省略。因此,这个标记的输出可能是:<td>
<td class="has-item">
MVC4的Razor解析器与MVC3不同。 Razor v3具有先进的解析功能,同时相对于MVC3来说解析更加严格。
如果您没有正确使用Razor语法,则在将MVC3转换为MVC4时可能会在视图中遇到语法错误。
一些常见的Razor代码错误解决方案,这些错误在Razor v2中是不被允许的:
-->除非有变量声明部分,否则请避免在视图中使用服务器块。
Don’t : @{if(check){body}}
Recommended : @if(check){body}
Don’t : @if(@variable)
Recommended : @if(variable)
Don't : @{int a = @Model.Property }
Recommended : @{int a = Model.Property }