2012-10-02 18 views
6

रेज़र 2 (जो एमवीसी 4 के साथ जहाजों) के उन्नयन के बाद "तत्व बंद नहीं हुआ" त्रुटि रेजर 1 (एमवीसी 3 से) के साथ पूरी तरह से पीछे की तरफ संगत नहीं लगती है।एमवीसी 3 से एमवीसी 4

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

कोड कि वजह से यह था:

उन्नयन के बाद से, मैं एक त्रुटि पाया

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

इस का हल क्या है?

उत्तर

14

उस्तरा पार्सर MVC 4, presumably because के लिए फिर से लिखा गया था:

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

हालांकि, सशर्त गुण:

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.

यहाँ सरल समाधान @ प्रतीक से पहले एक भी अंतरिक्ष जोड़ने के लिए है एमवीसी 4 के साथ रेजर में एक और अधिक सुरुचिपूर्ण वाक्यविन्यास है।

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

एक विशेषता मान null पर ले कर जाता है, विशेषता तत्व से छोड़ा गया है। ...

<td class="has-item"> 
1

MVC4 की उस्तरा पार्सर MVC3 से अलग है

<td> 

... या: तो यह मार्कअप के उत्पादन में भी नहीं हैं। रेजर वी 3 में उन्नत पार्सर विशेषताएं हैं और दूसरी तरफ सख्त पार्सिंग एमवीसी 3 की तुलना में है।

यदि आप रेज़र सिंटैक्स को सही तरीके से उपयोग नहीं करते हैं तो आप एमवीसी 3 को एमवीसी 4 में परिवर्तित करते समय सिंटैक्स त्रुटि में देख सकते हैं।

कुछ सामान्य उस्तरा कोड गलतियों कि उस्तरा में अनुमति नहीं है 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 }