Embora a Microsoft tenha criado uma renderização automagica de atributos html no MVC4, demorei bastante tempo para descobrir como renderizar uma segunda classe css em um elemento, com base em uma expressão condicional do razor. Eu gostaria de compartilhar com você.
Com base na propriedade model @ Model.Details, quero mostrar ou ocultar um item da lista. Se houver detalhes, uma div deve ser mostrada; caso contrário, ela deve estar oculta. Usando o jQuery, tudo o que preciso fazer é adicionar um show de classe ou ocultar, respectivamente. Para outros fins, também quero adicionar outra classe, "detalhes". Portanto, minha marcação deve ser:
<div class="details show">[Details]</div>
ou <div class="details hide">[Details]</div>
Abaixo, mostro algumas tentativas com falha (marcação resultante, assumindo que não há detalhes).
Este: <div @(@Model.Details.Count > 0 ? "class=details show" : "class=details hide")>
,
vai tornar este: <div class="details" hide="">
.
Este: <div @(@Model.Details.Count > 0 ? "class=\"details show\"" : "class=\"details hide\"")>
.
vai tornar este: <div class=""details" hide"="">
.
Este: <div @(@Model.Details.Count > 0 ? "class='details show'" : "class='details hide'")>
vai tornar este: <div class="'details" hide'="">
.
Nenhuma dessas marcações está correta.