Avec RazorViewEngine, je peux faire ceci:
if (somecondition) {
<div> some stuff </div>
}
mais je n'arrive pas à faire ça (Razor est confus):
if (somecondition) {
<div>
}
if (someothercondition) {
</div>
}
J'ai une situation dans laquelle je dois placer mes balises html d'ouverture et de fermeture dans différents blocs de code - comment puis-je faire cela dans Razor?
asp.net-mvc-3
razor
Sydneyos
la source
la source
<text><div></text>
- haacked.com/archive/2011/01/06/…<text><div></text>
fonctionne, mais<text></div></text>
ne fonctionne pas.Pour expliquer la réponse de Darin, c'est-à-dire en préfixant le HTML comme ceci:
@: dans Razor signifie `` rendre quelque chose sous forme de texte brut ''
ou vous pouvez utiliser ceci, qui génère le HTML tel que vous l'avez écrit initialement (cela peut également être utilisé pour éviter le codage HTML automatique que Razor fait si vous essayez de générer du HTML):
(Référence Html.Raw de MS - http://msdn.microsoft.com/en-us/library/gg568896(v=vs.111).aspx )
la source
@:<a href="@link" class="@classNames">@text</a>
@Html.Raw()
- voir l'article SO associéVous pouvez créer une méthode MVC Helper personnalisée. Pour avec vous créez une classe publique statique MyRenderHelpers dans l'espace de noms
System.Web.Mvc.Html
et écrivez une méthode Html.Vous pouvez maintenant utiliser cette méthode d'extension dans votre vue rasoir:
la source
Le fait que vous deviez faire cela indique généralement que votre code de vue n'est pas pris en compte correctement. La nature du HTML est d'avoir des balises équilibrées ou auto-incluses (au moins en HTML 4, HTML 5 semble s'en éloigner) et Razor dépend de cette hypothèse. Si vous allez à une sortie conditionnelle,
<div>
vous obtiendrez également une sortie quelque part plus tard</div>
. Mettez simplement la paire whoel dans votreif
déclaration:Sinon, vous vous retrouvez avec un code bizarre comme ici .
la source
@:
ou<text></text>
if (somecondition) { @:</div> }
<link>
balises.