Как пользоваться ? : операторы if с блоками Razor и встроенного кода - PullRequest
143 голосов
/ 23 января 2011

Я обновляю свои старые представления .aspx новым движком представления Razore.У меня есть несколько мест, где у меня есть такой код:

<span class="vote-up<%= puzzle.UserVote == VoteType.Up ? "-selected" : "" %>">Vote Up</span>

В идеале я хотел бы сделать это:

<span class="vote-up@{puzzle.UserVote == VoteType.Up ? "-selected" : ""}">Vote Up</span>

Однако здесь есть две проблемы:

  1. vote-up@{puzzle.UserVote .... не обрабатывает символ @ как начало блока кода
  2. @puzzle.UserVote == VoteType.Up смотрит на первую часть @puzzle.UserVote так, как будто он должен отрисовывать значениепеременной.

Кто-нибудь знает, как решить эти проблемы?

Ответы [ 4 ]

276 голосов
/ 23 января 2011

Это должно работать:

<span class="vote-up@(puzzle.UserVote == VoteType.Up ? "-selected" : "")">Vote Up</span>
31 голосов
/ 15 июля 2011

Ключ заключается в том, чтобы заключить выражение в скобки после символа @ delimiter. Вы можете заставить любое сложное выражение работать таким образом.

21 голосов
/ 26 июля 2017
@( condition ? "true" : "false" )
3 голосов
/ 24 января 2018

В большинстве случаев решение из CD .. будет работать отлично.Однако у меня была немного более запутанная ситуация:

 @(String.IsNullOrEmpty(Model.MaidenName) ? "&nbsp;" : Model.MaidenName)

Это напечатало бы меня "" на моей странице, соответственно сгенерировало источник &amp;nbsp;.Теперь есть функция Html.Raw("&nbsp;"), которая должна позволять вам писать исходный код, за исключением того, что в этом созвездии она выдает ошибку компилятора:

Сообщение об ошибке компилятора: CS0173: Тип условного выражения не может быть определенпотому что не существует неявного преобразования между 'System.Web.IHtmlString' и 'string'

Так что я закончил тем, что написал следующее утверждение, которое не так приятно, но работает даже в моем случае:

@if (String.IsNullOrEmpty(Model.MaidenName)) { @Html.Raw("&nbsp;") } else { @Model.MaidenName } 

Примечание: интересно то, что, попав в фигурную скобку, вы должны перезапустить блок Razor.

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