Почему Razor не распознает переменную, не заключая ее в скобки в некоторых случаях? - PullRequest
3 голосов
/ 02 июня 2011

У меня есть раздел кода Razor в одном из моих представлений, который ведет себя не так, как я ожидаю. Этот код содержит несколько мест, где мне нужно добавить значение переменной из модели в атрибут html. Приведенный ниже код представляет собой несколько упрощенную версию разметки на моей странице (я удалил часть разметки «шум», которая не была важна для этого примера, и просто затруднила чтение кода).

В трех случаях я использую @topic.StandardTopicId. 1-й и 2-й экземпляры заменяются, как я и ожидал, но 3-й экземпляр name="IsCovered_@topic.StandardTopicId" отображается без замены переменной.

Код вопроса:

@foreach(var topic in Model.Group) {
    <div id="frame-@topic.StandardTopicId" class="topic-frame">
       <label>
           <input type="radio" name="IsCovered_@(topic.StandardTopicId)" />
           No
       </label>
       <label>
           <input type="radio" name="IsCovered_@topic.StandardTopicId" />
            Yes
        </label>
    </div>
}

Пример вывода из вышеуказанного кодового блока:

...
<div id="frame-42" class="topic-frame">
    <label>
        <input type="radio" name="IsCovered_42" />
        No
    </label>
    <label>
        <input type="radio" name="IsCovered_@topic.StandardTopicId" value="No" />
        Yes
    </label>
</div>
...

Может кто-нибудь объяснить, почему последний экземпляр переменной не заменяется и вместо этого отображается как есть?

Ответы [ 2 ]

6 голосов
/ 02 июня 2011

Razor не будет анализировать "@" в середине слова.Подчеркивание рассматривается как часть слова, а не как тире.Используйте @ (), чтобы поместить код Razor в слова.@ (Topic.StandardTopicId)

5 голосов
/ 02 июня 2011

Вот ссылка на синтаксис Razor: Краткий справочник по синтаксису Razor C #

Скорее всего, Razor считает IsCovered_@topic.StandardTopicId действительным форматом адреса электронной почты и поэтому оставляет его как есть..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...