Возможное нарушение изменения в MVC4 Razor, которое можно зафиксировать с помощью "@: @" - программирование

Возможное нарушение изменения в 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/Razor2 строка string.Format приводит к ошибке:

Неожиданное ключевое слово "строка" после символа "@". После внутреннего кода вам не нужно префиксные конструкции, такие как "string" с "@".

Если вы удалите @, тогда механизм просмотра требует, чтобы вы завершали строку string.Format точкой с запятой. Однако ReSharper затем предупреждает (правильно):

Возвращаемое значение чистого метода не используется.

Два исправления, которые я нашел для этого, - либо использовать <text>:

<text>@string.Format("The value {0}", x)</text>

Или более любопытный подход с использованием @:@:

@:@string.Format("The value {0}", x)

Является ли это известным и документированным изменением механизма просмотра Razor?

4b9b3361

Ответ 1

Похоже на ошибку. Он работает с String:

@foreach (var x in Model)
{
    @String.Format("Foo bar: {0}", x)
}

Ответ 2

Это действительно ошибка, которую мы решили не исправлять, обратите внимание, что синтаксис неверен, поскольку в этом случае переход между С# и разметкой отсутствует.

Я понимаю, что resharper показывает предупреждение здесь, но я считаю, что предупреждение неверно.

Вот ошибка для будущих ссылок https://aspnetwebstack.codeplex.com/workitem/458