2012-10-02 24 views
6

Dao cạo 2 (đi kèm với MVC4) dường như không hoàn toàn tương thích ngược với Dao cạo 1 (từ MVC3).Lỗi "Phần tử không đóng" sau khi nâng cấp từ MVC3 lên MVC4

Từ khi nâng cấp, tôi tìm thấy một lỗi:

The "[email protected](count" element was not closed. All elements must be either self-closing or have a matching end tag.

Mã đã gây ra điều này là:

<[email protected](count == null ? null : " class='has-item'")> 

các giải pháp này là gì?

Trả lời

14

Các Razor phân tích cú pháp đã được tái bản cho MVC 4, presumably because:

The HTML5-specs clearly states that unclosed HTML-tags are supported, but Razor v1 didn't have an advanced enough parser to support this. Razor v2 now supports this with the elements listed in W3C's spec.

Giải pháp đơn giản nhất ở đây là thêm một không gian duy nhất trước khi @ biểu tượng:

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

thuộc tính Tuy nhiên, có điều kiện trong Razor với MVC 4 có một cú pháp thanh lịch hơn.

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

Khi giá trị thuộc tính giải quyết thành null, thuộc tính được bỏ qua khỏi phần tử. Vì vậy, sản lượng đánh dấu đây là một trong hai:

<td> 

... hoặc ...

<td class="has-item"> 
1

Các phân tích cú pháp Razor của MVC4 là khác nhau từ MVC3. Razor v3 có các tính năng phân tích cú pháp nâng cao và mặt khác phân tích cú pháp nghiêm ngặt so với MVC3.

Bạn có thể gặp lỗi cú pháp trong chế độ xem khi chuyển đổi MVC3 sang MVC4 nếu bạn không sử dụng cú pháp dao cạo theo cách chính xác.

Giải pháp của một số mã sai lầm dao cạo phổ biến mà không được phép vào Razor v2 là:

-> Tránh sử dụng các khối máy chủ trong quan điểm, trừ khi có phần khai báo biến.

Don’t : @{if(check){body}} 
Recommended : @if(check){body} 

-> Tránh sử dụng @ khi bạn đã ở trong phạm vi máy chủ.

Don’t : @if(@variable) 
Recommended : @if(variable) 

Don't : @{int a = @Model.Property } 
Recommended : @{int a = Model.Property } 
Các vấn đề liên quan