Razor 2(与MVC4一起提供)似乎与Razor 1(来自MVC3)完全向后兼容。
自升级以来,我发现了一个错误:
“td@Html.Raw(count”元素未关闭。所有元素必须是自动关闭或具有匹配的结束标记。
造成这种情况的代码是:
<td@Html.Raw(count == null ? null : " class='has-item'")>
这是什么解决方案?
答案 0 :(得分:14)
Razor解析器是为MVC 4重新编写的,presumably because:
HTML5规范明确指出支持未封闭的HTML标记,但Razor v1没有足够先进的解析器来支持这一点。 Razor v2现在支持W3C规范中列出的元素。
这里最简单的解决方案是在@
符号前添加一个空格:
<td @Html.Raw(count == null ? null : " class='has-item'")>
然而,使用MVC 4的Razor中的条件属性具有更优雅的语法。
<td class="@(count == null ? null : "has-item")">
当属性值解析为null
时,该元素将省略该属性。所以这个标记的输出是:
<td>
...或...
<td class="has-item">
答案 1 :(得分:1)
MVC4的Razor解析器与MVC3不同。 Razor v3具有高级解析器功能,另一方面严格解析与MVC3相比。
如果您没有以正确的方式使用razor语法,则在将MVC3转换为MVC4时可能会在视图中遇到语法错误。
解决Razor v2中不允许的一些常见剃刀代码错误:
- &GT;除非有变量声明部分,否则请避免在视图中使用服务器块。
Don’t : @{if(check){body}}
Recommended : @if(check){body}
- &GT;当你已经在服务器范围内时,避免使用@。
Don’t : @if(@variable)
Recommended : @if(variable)
Don't : @{int a = @Model.Property }
Recommended : @{int a = Model.Property }