Estou atualizando minhas exibições .aspx antigas com o novo mecanismo de exibição Razore. Eu tenho vários lugares onde eu tenho código assim:
<span class="vote-up<%= puzzle.UserVote == VoteType.Up ? "-selected" : "" %>">Vote Up</span>
Idealmente, eu gostaria de fazer isso:
<span class="vote-up@{puzzle.UserVote == VoteType.Up ? "-selected" : ""}">Vote Up</span>
No entanto, existem dois problemas aqui:
vote-up@{puzzle.UserVote
.... não está tratando o símbolo @ como o início de um bloco de código@puzzle.UserVote == VoteType.Up
olha para a primeira parte@puzzle.UserVote
como se fosse para renderizar o valor da variável.
Alguém sabe como resolver esses problemas?
@(puzzle.UserVote == VoteType.Up ? "-selected" : "")
@(isSomething ? "class='test'" : "")
exemplo , por exemplo, injetar javascript ou similar, ele os codificará como entidades'
e quebrará a página. Então você deve usarHtml.Raw("..")
. Caso contrário, com o código acima, você terminará com algo como o<p class='test'>
que é inválido.Respostas:
Isso deve funcionar:
fonte
A chave é encapsular a expressão entre parênteses após o delimitador @. Você pode fazer qualquer expressão composta funcionar dessa maneira.
fonte
fonte
Na maioria dos casos, a solução do CD .. funcionará perfeitamente bem. No entanto, tive uma situação um pouco mais distorcida:
Isso me imprimiria "& nbsp;" na minha página, respectivamente, gere a fonte
&nbsp;
. Agora, existe uma funçãoHtml.Raw(" ")
que deve permitir que você escreva o código-fonte, exceto que nesta constelação gera um erro do compilador:Acabei escrevendo uma declaração como a seguinte, que é menos agradável, mas funciona mesmo no meu caso:
Nota: o interessante é que, uma vez dentro da chave, você deve reiniciar um bloco de barbear.
fonte
@(String.IsNullOrEmpty(Model.MaidenName) ? Html.Raw(" ") : Model.MaidenName)
@(String.IsNullOrEmpty(Model.MaidenName) ? Html.Raw(" ") : Html.Raw(Model.MaidenName))