के साथ तय किया जा सकता है मैंने हाल ही में अपनी वेबसाइट को एएसपी.नेट एमवीसी 3 (रेजर) से एमवीसी 4 (रेजर 2) में अपग्रेड किया है, और ऐसा करने में ऐसा लगता है कि ब्रेकिंग बदलाव की तरह क्या लगता है रेजर व्यू इंजन।एमवीसी 4 रेजर में संभावित ब्रेकिंग चेंज जिसे "@: @"
परिदृश्य (बहुत सरलीकृत) नीचे दिखाया गया है।
@model IEnumerable<string>
@{ Layout = null; }
<!DOCTYPE html>
<html>
<body>
<div>
@foreach (var x in Model)
{
@string.Format("Foo bar: {0}", x) // Errors in MVC4/Razor2
}
</div>
</body>
</html>
यह MVC3/उस्तरा में ठीक काम करता है, फिर भी MVC4 में/Razor2 की एक त्रुटि में string.Format
लाइन परिणाम: के बाद "@" चरित्र
अप्रत्याशित "स्ट्रिंग" कीवर्ड। एक बार कोड के अंदर, आपको "स्ट्रिंग" जैसे "स्ट्रिंग" जैसी संरचनाओं को उपसर्ग करने की आवश्यकता नहीं है।
आप @
निकालते हैं, तो दृश्य इंजन तो मांग है कि आप अर्धविराम string.Format
लाइन को समाप्त। हालांकि, फिर रीशेर्पर चेतावनी देता है (ठीक है तो):
शुद्ध विधि का वापसी मूल्य उपयोग नहीं किया जाता है।
दो फिक्स मैं इस के लिए मिल गया है या तो <text>
उपयोग करने के लिए कर रहे हैं:
<text>@string.Format("The value {0}", x)</text>
या एक और अधिक उत्सुक दृष्टिकोण @:@
का उपयोग कर:
@:@string.Format("The value {0}", x)
यह एक जाना जाता है और प्रलेखित परिवर्तन है रेजर व्यू इंजन में?
इस मामले में ReSharper से चेतावनी गलत है के लिए बग है, और उन्हें करने के लिए सूचना या दबा दिया जाना चाहिए। डिज़ाइन समय और रनटाइम में उत्पन्न सी # कोड के बीच एक अंतर है, रनटाइम सी # स्ट्रिंग.फॉर्मैट को किसी अन्य विधि कॉल के साथ लपेट देगा, और इसलिए यह पूरी तरह मान्य है। Resharper त्रुटियों के इस वर्ग को अनदेखा करना चाहिए (और आप भी कर सकते हैं) –