2012-06-07 39 views
6

Chúng tôi đã có chế độ xem (.cshtml) hiển thị XML cho nguồn cấp dữ liệu RSS bằng ASP.NET MVC 3, hoạt động tốt. Bây giờ chúng ta đã nâng cấp lên ASP.NET MVC 4 với Razor 2 nó tạo ra các lỗi biên dịch, tương tự như dưới đây.ASP.NET MVC 4 và Razor 2: Công cụ xem không còn hỗ trợ xml?

Parser Error 

Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately. 

Parser Error Message: Encountered end tag "item" with no matching start tag. Are your start/end tags properly balanced? 

Thẻ được cân bằng chính xác.

Mọi người đều có bất kỳ suy nghĩ nào?

UPDATE: tôi đã cô lập nó xuống các yếu tố liên kết trong mục yếu tố trong @foreach (...) {...} khối.

@foreach (var item in Model.Items) 
{ 
<item> 
    <title>@item.Title</title> 
    <link>@item.Link</link> 
    <description>@item.Description</description> 
    <guid>@item.Guid</guid> 
    @if (item.PublishedDateUtc.HasValue) 
    { 
    <pubDate>@item.PublishedDateUtc.Value.ToString("ddd, dd MMM yyyy HH:mm:ss") GMT</pubDate> 
    } 
</item>  
} 

tôi cố định nó bằng cách làm sử dụng @ Html.Raw dưới đây.

@foreach (var item in Model.Items) 
{ 
<item> 
    <title>@item.Title</title> 
    @Html.Raw(string.Format("<link>{0}</link>", item.Link.ToHtmlEncoded())) 
    <description>@item.Description</description> 
    <guid>@item.Guid</guid> 
    @if (item.PublishedDateUtc.HasValue) 
    { 
    <pubDate>@item.PublishedDateUtc.Value.ToString("ddd, dd MMM yyyy HH:mm:ss") GMT</pubDate> 
    } 
</item>  
} 

Bất kỳ ai có đề xuất nào tốt hơn? Rõ ràng, tôi chỉ có thể sử dụng một lớp để khai báo mô hình và trả về XML trực tiếp từ bộ điều khiển, nhưng tôi quan tâm hơn đến lý do hành vi này xảy ra và những gì tôi có thể làm để phù hợp hơn với cú pháp Razor.

+0

bạn có thể đăng bài '' tag được thông báo lỗi được nói về? –

+0

Đã cập nhật câu hỏi bằng thẻ và ** cách giải quyết **. Có suy nghĩ gì không? –

Trả lời

8

Khi lần đầu tiên tôi nhìn vào điều này, tôi nhận thấy thẻ link của bạn có thẻ đóng thay vì tự đóng. Dao cạo là thông minh đủ để biết html và biết cách đóng thẻ liên kết. Dưới đây là một ví dụ khác của một cái gì đó có thể phá vỡ để hiển thị như thế nào Razor đọc html.

.... 
<tbody> 
    @if (alternating) { 
     <tr class='alternating'> 
    } else { 
     <tr> 
    } 

    .... 

     </tr> 
</tbody> 

Điều này sẽ không thành công vì nó thấy </tr> không có thẻ mở.

Thẻ luôn tự đóng được diễn giải bởi Razor để tự đóng. để thẻ link của bạn thực sự kết thúc tại >. (vì đó là html hợp lệ để có thẻ đóng tự động mà không cần />) Vì vậy, bây giờ chúng tôi bắt gặp thẻ đóng không có thẻ mở để biện minh cho thẻ để trình phân tích cú pháp từ bỏ và nói rằng nó không được định dạng đúng. Tôi phải làm một số kiểm tra nhưng tôi khá chắc chắn nó giả định đóng link thẻ có nghĩa là cho các thẻ item kể từ đó sẽ cung cấp cho sự cân bằng thích hợp đó là lý do tại sao phần còn lại của tập tin phân tích tốt cho đến khi nó đi qua này duy nhất item tag không có thẻ mở.

Cần đủ thông minh để biết rằng thẻ đóng trước đó không phải là thẻ phù hợp. Nó có thể là một vấn đề để mất với đội bóng.

Tôi đã không thử nó nhưng bạn sẽ có thể làm được điều này

@foreach (var item in Model.Items) 
{ 
<item> 
    <title>@item.Title</title> 
    @:<link> 
     @item.Link 
    @:</link> 
    <description>@item.Description</description> 
    <guid>@item.Guid</guid> 
    @if (item.PublishedDateUtc.HasValue) 
    { 
    <pubDate>@item.PublishedDateUtc.Value.ToString("ddd, dd MMM yyyy HH:mm:ss") GMT</pubDate> 
    } 
</item>  
} 
+0

Vì vậy, đây là Razor cố gắng thông minh với HTML 5, vì ví dụ của tôi là một nguồn cấp dữ liệu RSS trong XML chứ không phải HTML 5. Phần tử ** link ** không phải là phần tử tự đóng trong trường hợp này. –

+0

Điều này giải thích hành vi, nhưng không phải là giải pháp. (Không cố gắng để có được khó khăn, nhưng những người khác sẽ muốn biết phải làm gì trong tình huống này.) Có một giải pháp tốt để tắt Razor từ phù hợp với các quy tắc cú pháp phần tử HTML 5 khi biên dịch? –

+0

Đã hiểu, bạn đã nói 'nhưng tôi quan tâm hơn đến lý do hành vi này xảy ra và những gì tôi có thể làm để phù hợp hơn với cú pháp Razor.', đó là những gì tôi đã cố gắng làm :) – Buildstarted

Các vấn đề liên quan