Con RazorViewEngine, puedo hacer esto:
if (somecondition) {
<div> some stuff </div>
}
pero parece que no puedo hacer esto (Razor se confunde):
if (somecondition) {
<div>
}
if (someothercondition) {
</div>
}
Tengo una situación en la que necesito colocar mis etiquetas html de apertura y cierre en diferentes bloques de código. ¿Cómo puedo hacer esto en Razor?
asp.net-mvc-3
razor
Sydney
fuente
fuente
<text><div></text>
- haacked.com/archive/2011/01/06/…<text><div></text>
funciona, pero<text></div></text>
no.Para explicar la respuesta de Darin, es decir, prefijando el HTML de esta manera:
@: en Razor significa 'renderizar algo como texto sin formato'
o puede usar esto, que genera el HTML como lo escribió originalmente (esto también se puede usar para evitar la codificación HTML automática que hace Razor si está tratando de generar HTML):
(Referencia Html.Raw de MS - http://msdn.microsoft.com/en-us/library/gg568896(v=vs.111).aspx )
fuente
@:<a href="@link" class="@classNames">@text</a>
@Html.Raw()
- vea la publicación de SO relacionadaPuede crear un método MVC Helper personalizado. Porque con usted crea una clase pública estática MyRenderHelpers en el espacio de nombres
System.Web.Mvc.Html
y escribe un método Html.Ahora puede usar este método de extensión en su vista de afeitadora:
fuente
El hecho de que tenga que hacer esto generalmente indica que su código de vista no está factorizado correctamente. La naturaleza de HTML es tener etiquetas equilibradas o auto-adjuntas (al menos en HTML 4, HTML 5 parece estar alejándose de él) y Razor depende de esa suposición. Si va a salir condicionalmente
<div>
a, también lo hará en algún lugar posterior</div>
. Simplemente ponga el par total en suif
declaración:De lo contrario, terminará con un código extraño como este .
fuente
@:
o<text></text>
if (somecondition) { @:</div> }
<link>
etiquetas.