asp.net-mvc-3 - net - razor tag helper select




Razor versteht nicht versteckte HTML-Tags (3)

Die Tatsache, dass Sie dies normalerweise tun müssen, weist darauf hin, dass Ihr Ansichtscode nicht korrekt berücksichtigt wird. Die Natur von HTML besteht darin, ausgewogene oder in sich geschlossene Tags zu haben (zumindest in HTML 4 scheint sich HTML 5 davon zu entfernen) und Razor hängt von dieser Annahme ab. Wenn du ein <div> ausgibst, dann wirst du auch später irgendwo </div> ausgeben. Setzen Sie einfach das Whoelpaar in Ihre if Anweisung:

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

Sonst hast du am Ende seltsamen Code wie here .

Mit RazorViewEngine kann ich das machen:

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

aber ich kann das nicht tun (Razor wird verwirrt):

if (somecondition) {
    <div>
}

if (someothercondition) {
    </div>
}

Ich habe eine Situation, in der ich meine öffnenden und schließenden html-Umbauten in verschiedene Codeblöcke setzen muss - wie kann ich das in Razor tun?


Sie können eine benutzerdefinierte MVC-Helper-Methode erstellen. Denn mit Ihnen erstellen Sie eine öffentliche statische Klasse MyRenderHelpers im Namespace System.Web.Mvc.Html und schreiben Sie eine Methode 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;
        }
    }
}

Jetzt können Sie diese Erweiterungsmethode in Ihrer Rasiereransicht verwenden:

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

Versuche es so:

if (somecondition) {
    @:<div>
}






razor