Avec RazorViewEngine, je peux le faire:
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 j'ai besoin de mettre mes balises html d'ouverture et de fermeture dans différents blocs de code - comment puis-je faire cela dans Razor?
Essayez comme ceci:
if (somecondition) {
@:<div>
}
Pour expliquer la réponse de Darin, c'est-à-dire en préfixant le HTML comme ceci:
@:<html>
@: dans Razor signifie 'rendre quelque chose en texte brut'
ou vous pouvez utiliser ceci, qui génère le code HTML tel que vous l'avez écrit à l'origine (cela peut également être utilisé pour éviter l'encodage HTML automatique que Razor fait si vous essayez de produire du code HTML):
@Html.Raw("<html>")
(Référence Html.Raw de MS - http://msdn.Microsoft.com/en-us/library/gg568896 (v = vs.111) .aspx )
Vous pouvez créer une méthode d'assistance MVC personnalisée. Car avec vous créez une classe statique publique MyRenderHelpers dans l'espace de noms System.Web.Mvc.Html
et écrire une méthode Html.
namespace System.Web.Mvc.Html
{
public static class MyRenderHelpers
{
public static MvcHtmlString Html(this HtmlHelper helper, string html, bool condition)
{
if (condition)
return MvcHtmlString.Create(html);
else
return MvcHtmlString.Empty;
}
}
}
Vous pouvez maintenant utiliser cette méthode d'extension dans votre vue de rasoir:
@Html.Html("<div>", somecondition)
Le fait que vous ayez à le faire indique généralement que votre code d'affichage n'est pas correctement pris en compte. La nature du HTML est d'avoir des balises équilibrées ou autonomes (au moins en HTML 4, HTML 5 semble s'éloigner de lui) et Razor dépend de cette hypothèse. Si vous allez surclasser conditionnellement un <div>
alors vous pourrez également quelque part plus tard sortir </div>
. Mettez simplement la paire de whoel dans votre instruction if
:
@if(something) {
<div>
Other stuff
</div>
}
Sinon, vous vous retrouvez avec un code bizarre comme ici .