Возможное критическое изменение в MVC4 Razor, которое можно исправить с помощью «@: @»
Недавно я обновил свой веб-сайт с ASP.NET MVC3 (Razor) до MVC4 (Razor2), и при этом обнаружил нечто, похожее на резкое изменение в движке представления Razor.
Сценарий (значительно упрощенный) показан ниже.
@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 / Razor, однако в MVC4 / Razor2string.Format
Строка приводит к ошибке:
Неожиданное ключевое слово "string" после символа "@". Оказавшись внутри кода, вам не нужно ставить перед конструкциями, такими как «строка», символ «@».
Если вы удалите@
двигатель представления затем требует, чтобы вы прекратилиstring.Format
строка с точкой с запятой. Однако ReSharper тогда предупреждает (правильно):
Возвращаемое значение чистого метода не используется.
Два исправления, которые я нашел для этого, должны использовать<text>
:
<text>@string.Format("The value {0}", x)</text>
Или более любопытный подход с использованием@:@
:
@:@string.Format("The value {0}", x)
Является ли это известным и задокументированным изменением в движке Razor?