98 votes

Razor ne comprend pas les balises html non fermées

Avec RazorViewEngine, je peux le faire :

if (somecondition) {
     <div> some stuff </div>
}

mais je ne parviens pas à le faire (Razor s'embrouille) :

if (somecondition) {
    <div>
}

if (someothercondition) {
    </div>
}

Je suis dans une situation où je dois placer mes balises html d'ouverture et de fermeture dans des blocs de code différents - comment puis-je faire cela dans Razor ?

159voto

Darin Dimitrov Points 528142

Essayez comme ça :

if (somecondition) {
    @:<div>
}

58voto

Chris Halcrow Points 907

Pour expliquer la réponse de Darin, c'est à dire préfixer le HTML comme ceci :

@:<html>

@ : dans Razor, signifie "rendre quelque chose en texte brut".

ou vous pouvez utiliser ceci, qui affiche le HTML tel que vous l'avez écrit à l'origine (ceci peut également être utilisé pour éviter l'encodage HTML automatique que Razor effectue si vous essayez d'afficher du HTML) :

@Html.Raw("<html>")

(Référence Html.Raw de MS -) http://msdn.microsoft.com/en-us/library/gg568896(v=vs.111).aspx )

4voto

Thomas Hauser Points 21

Vous pouvez créer une méthode MVC Helper personnalisée. Par exemple, vous créez une classe statique publique MyRenderHelpers dans le namespace 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 rasoir :

@Html.Html("<div>", somecondition)

3voto

marcind Points 38002

Le fait que vous deviez faire cela indique généralement que votre code de vue n'est pas correctement factorisé. La nature du HTML est d'avoir des balises équilibrées ou auto-fermées (au moins dans HTML 4, HTML 5 semble s'en éloigner) et Razor dépend de cette hypothèse. Si vous voulez exclure conditionnellement une balise <div> alors vous aurez aussi quelque part une sortie ultérieure </div> . Il suffit de mettre la paire de whoel dans votre if déclaration :

@if(something) {
    <div>
        Other stuff
    </div>
}

Sinon, vous vous retrouvez avec un code bizarre comme ici .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X