2014-10-22 3 views
0

Я только что начал с Razor (v3), и все в порядке, но я не понимаю правил, когда вам нужно использовать знак @.Каковы правила вставки синтаксиса @ в синтаксисе Razor?

Вот пример из моего текущего проекта.

В этом коде:

@if (ViewBag.ForcePublic == null && User.Identity.GetUserId() == @Model.Seller.Id) 
     {        
      <h2>Listing Status</h2> 
      switch (Model.Status) 
      { 

Если я ставлю @ перед утверждением переключателя, я получаю сообщение об ошибке выполнения сказать, что мне не нужно, чтобы гнездо @ знаков.

Однако в этом коде:

@if(!Model.BizAddress.StreetAddress.IsEmpty()) { 
       @Html.DisplayFor(model => model.BizAddress.StreetAddress); 
      } 

Я не только не получить ошибку синтаксиса (как и следовало ожидать, учитывая пример выше), если я не включать знак @ в перед Html.DisplayFor, мой адрес StreetAddress не печатается. Вместо этого он бессильно терпит неудачу!

Я хотел бы понять, почему это происходит, чтобы я мог избежать тонких ошибок, которые могут возникнуть в будущем.

Я подозреваю, что основная причина имеет отношение к тому факту, что шаблон (я думаю) аналогичен шагу препроцессора, а область кода C# известна только во время выполнения, поэтому эти два примера являются структурными то же самое происходит после обоих этапов (предварительный процесс, компиляция и запуск).

ответ

1

@ в бритве используются для двух различных целей:

1- Вы обозначаете начало блока кода с Razor, используя @ характер. Это как <% %> в веб-формах.

2- Встроенные выражения (переменные и функции) начинаются с @ (для записи содержимого на странице). Это как <%: %> или <% Response.Write() %> в веб-формах.

В вашем коде символ @ до if обозначает начало кодового блока. Конец блока - это конец } блока if. Вам не нужно и не разрешено использовать @ для чего-то промежуточного. Но, @ до Html.DisplayFor() используется для встроенного выражения. На самом деле, вы не должны указывать полуточку в конце этой строки, в противном случае после имени дисплея на странице будет отображаться точка с запятой.

Посмотрите на это quick reference для более подробной информации.

Смежные вопросы