从升级到MVC3后MVC4“元素没有关闭”的错误(“Element not closed” erro

2019-09-23 09:07发布

剃刀2(它随MVC4)似乎不与剃刀1(来自MVC3)完全向后兼容的。

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

所述“td@Html.Raw(计数”元素未封闭,所有元件必须是自封闭的或具有匹配的结束标记。

造成这种情况的代码为:

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

如何解决这个?

Answer 1:

对于MVC 4剃刀解析器重新写的, 大概是因为 :

在HTML5的规范中明确指出,未关闭的HTML标签的支持,但剃刀V1没有一个足够先进分析器来支持这一点。 剃刀V2现在支持这个与W3C的规范中列出的元素。

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

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

然而,与MVC 4剃刀条件属性有一个更优雅的语法。

<td class="@(count == null ? null : "has-item")">

当属性值解析为null ,则该属性从元件省略。 所以这个标记的输出可以是:

<td>

...要么...

<td class="has-item">


Answer 2:

MVC4的剃刀解析器是MVC3不同。 剃刀V3是具有先进的解析器的功能和在另一方面严格的分析比较MVC3。

而转换到MVC3如果MVC4你没有按照正确的方式使用剃刀语法您可以在视图中遇到语法错误。

的未在剃刀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 }


文章来源: “Element not closed” error after upgrading from MVC3 to MVC4