web-dev-qa-db-fra.com

Razor ne comprend pas les balises html non fermées

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?

97
sydneyos

Essayez comme ceci:

if (somecondition) {
    @:<div>
}
158
Darin Dimitrov

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 )

57
Chris Halcrow

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)
4
Thomas Hauser

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 .

3
marcind