Com RazorViewEngine, posso fazer isso:
if (somecondition) {
<div> some stuff </div>
}
mas não consigo fazer isso (Razor fica confuso):
if (somecondition) {
<div>
}
if (someothercondition) {
</div>
}
Eu tenho uma situação em que preciso colocar minhas tags html de abertura e fechamento em blocos de código diferentes - como posso fazer isso no Razor?
asp.net-mvc-3
razor
Sydney
fonte
fonte
<text><div></text>
- haacked.com/archive/2011/01/06/…<text><div></text>
funciona, mas<text></div></text>
não funciona.Para explicar a resposta de Darin, ou seja, prefixando o HTML assim:
@: em Razor significa 'renderizar algo como texto simples'
ou você pode usar isto, que produz o HTML como você o escreveu originalmente (isso também pode ser usado para evitar a codificação HTML automática que o Razor faz se você está tentando produzir HTML):
(Referência Html.Raw da MS - http://msdn.microsoft.com/en-us/library/gg568896(v=vs.111).aspx )
fonte
@:<a href="@link" class="@classNames">@text</a>
@Html.Raw()
- veja o SO relacionado pósVocê pode criar um método MVC Helper personalizado. Pois com você cria uma classe pública estática MyRenderHelpers no namespace
System.Web.Mvc.Html
e escreve um método Html.Agora você pode usar este método de extensão em sua visualização de navalha:
fonte
O fato de você ter que fazer isso geralmente indica que seu código de visualização não está fatorado corretamente. A natureza do HTML é ter tags balanceadas ou auto-fechadas (pelo menos no HTML 4, o HTML 5 parece estar se afastando dele) e o Razor depende dessa suposição. Se você for retirar condicionalmente um,
<div>
então também produzirá em algum lugar mais tarde</div>
. Basta colocar o par whoel em seuif
extrato:Caso contrário, você acabará com um código estranho como este .
fonte
@:
ou<text></text>
if (somecondition) { @:</div> }
<link>
tags.