Razor-код между двойными кавычками

В шаблоне Razor View Engine я хочу сделать следующее: я хочу поместить некоторый код между двойными кавычками атрибута html. Проблема в том, что фрагмент кода, который я хочу вставить, сам содержит двойные кавычки.

<a href="Url.Action("Item", new { id = Model.Item.Id, page = page });">@page</a>

Вы можете легко увидеть, как все становится ужасно неправильно :-) Я знаю, что могу вычислить ссылку в переменной, а затем использовать ее, но я бы не хотел:

@{ var action = Url.Action("Question", new { id = Model.Question.Id, page = page }); }                   
<a href="@action">@page</a>                                        

person Thomas    schedule 22.11.2010    source источник


Ответы (3)


Вам не нужно убегать или что-то еще, используя Razor. Razor достаточно умен, чтобы знать, когда кавычки находятся внутри атрибутов, потому что вы выходите за пределы html при его разборе.

<a href="@Url.Action("Item", 
       new { id = Model.Item.Id, page = page })">@page</a>

Этот код будет работать нормально. Просто убедитесь, что у вас есть символ @ перед вызовом Url.Action, потому что, если вы этого не сделаете, он не будет правильно проанализирован, и я заметил, что в вашем вопросе его нет.

Редактировать: удалено; поскольку Url.Action не является оператором.

person Buildstarted    schedule 22.11.2010
comment
Одно замечание: если вам нужен постоянный префикс в вашем атрибуте в сочетании с выражением Razor, вам нужно добавить круглые скобки после символа @, иначе Razor будет рассматривать его как адрес электронной почты. Пример: id="prefix@(Model.Id)" - person Igor Brejc; 17.12.2011

Возможно, я не понял вашего вопроса, и в этом случае, пожалуйста, поправьте меня, но не могли бы вы просто:

@Html.ActionLink(page, "Question", new { id = Model.Question.Id, page = page })
person Darin Dimitrov    schedule 22.11.2010

Это может быть правильно:

href="@(action)"> @page 
person D S    schedule 08.12.2013
comment
Грустно, что вы проголосовали против - решение моей проблемы состояло в том, чтобы добавить @(xxx) вместо () без () - и я полагаю, это то, что вы сказали - поместите "действие" внутри () - что точно решил мою проблему, @xxx не работал внутри - person Traderhut Games; 10.06.2015