Синтаксическая ошибка Razor " в качестве оператора можно использовать только выражения assignment, call, increment, decrement, await и new object"

Я объявляю следующий синтаксис в представлении MVC Razor:

 @{
    foreach (var speaker in Model)
    {
       speaker.Name;               
    }           
 }

и получаю ошибку

в качестве оператора можно использовать только выражения присваивания, вызова, приращения, декремента, ожидания и новых объектов--5-->

Я могу исправить, добавив @ С speaker.Name;

но почему ? Извините, я новичок в Razor, но пока я в блоке кода @ {} почему я должен использовать @ снова. Даже я не смешиваю. с HTML ?

помогите пожалуйста.

2 ответов


без @, двигатель бритвы интерпретирует speaker.Name; как чистый C#-то есть, просто ссылаясь на свойство, но ничего не делая с ним-но это не будет компилироваться. оператор, который просто ссылается на свойство сам по себе, без получения или установки его значения, недопустим в C#.

рассмотрим эту бритву

@foreach (var speaker in Model)
{
   var name = speaker.Name;
   @name
}

первая строка-чистый C#. Он объявляет переменную name и инициализирует его значением speaker.Name.

в вторая строка интерпретируется как директива печати бритвы, которая печатает значение name на выходе.


в блоке кода бритвы,@ означает распечатать это значение. В этом конкретном случае, без @ вы ничего не говорите Razor, вы просто вставляете имя свойства вместо оператора.

вот почему @ исправит в этом случае. Он имеет другое значение, чем "пометить кодовый блок".

в качестве примечания вы также можете использовать @ чтобы отметить буквальный блок:

@:speaker.Name;

также "исправит" его, распечатав, буквально "динамик".Имя; " вместо его значения