2011-01-22 1 views
123

Я обновляю свои старые .aspx-представления с помощью нового механизма просмотра Razore. У меня есть куча мест, где у меня есть такой код:Как использовать? : if с помощью блоков Razor и inline code

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

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

<span class="[email protected]{puzzle.UserVote == VoteType.Up ? "-selected" : ""}">Vote Up</span> 

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

  1. [email protected]{puzzle.UserVote. ... не обрабатывает символ @ как начало кодового блока
  2. @puzzle.UserVote == VoteType.Up смотрит на первую часть @puzzle.UserVote, как будто это предположительно, чтобы отобразить значение переменной.

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

+6

Я не использовал Razor, но на основании того, что я вижу, попробуйте '@ (puzzle.UserVote == VoteType.Up?" -selected ":" ")' –

ответ

239

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

<span class="[email protected](puzzle.UserVote == VoteType.Up ? "-selected" : "")">Vote Up</span> 
+0

Очень странно использовать этот параметр, а не brace –

29

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

8
@(condition ? "true" : "false") 
+1

Я пошел на это, чувствовал себя чистым и легко читаю позже. –

+1

Если вам нужно отобразить значение свойства (включая строку), а не вызвать ToString() - что не работает в моем случае. Вы можете сделать это @ (условие? $ "{Foo.bar}": "По умолчанию") –

1

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

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

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

Compiler Error Message: CS0173: Type of conditional expression cannot be determined because there is no implicit conversion between 'System.Web.IHtmlString' and 'string'

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

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

Примечание: интересная вещь, когда вы находитесь внутри фигурной скобки, вы должны перезапустить Бритва блок.

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