Mit RazorViewEngine kann ich Folgendes tun:
if (somecondition) {
<div> some stuff </div>
}
aber ich kann das scheinbar nicht tun (Razor wird verwirrt):
if (somecondition) {
<div>
}
if (someothercondition) {
</div>
}
Ich habe eine Situation, in der ich meine öffnenden und schließenden HTML-Tags in verschiedenen Codeblöcken ablegen muss - wie kann ich das in Razor tun?
asp.net-mvc-3
razor
Sydney
quelle
quelle
<text><div></text>
- haacked.com/archive/2011/01/06/…<text><div></text>
funktioniert, funktioniert aber<text></div></text>
nicht.Um Darins Antwort zu erklären, dh das HTML wie folgt voranzustellen:
@: in Razor bedeutet "etwas als einfachen Text rendern"
oder Sie können dies verwenden, wodurch der HTML-Code so ausgegeben wird, wie Sie ihn ursprünglich geschrieben haben (dies kann auch verwendet werden, um die automatische HTML-Codierung zu vermeiden, die Razor ausführt, wenn Sie versuchen, HTML auszugeben):
(Html.Raw-Referenz von MS - http://msdn.microsoft.com/en-us/library/gg568896(v=vs.111).aspx )
quelle
@:<a href="@link" class="@classNames">@text</a>
@Html.Raw()
- siehe verwandte SO PostSie können eine benutzerdefinierte MVC-Hilfsmethode erstellen. Denn mit erstellen Sie eine öffentliche statische Klasse MyRenderHelpers im Namespace
System.Web.Mvc.Html
und schreiben eine Methode Html.Jetzt können Sie diese Erweiterungsmethode in Ihrer Rasiereransicht verwenden:
quelle
Die Tatsache, dass Sie dies tun müssen, zeigt normalerweise an, 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 abzulehnen), und Razor hängt von dieser Annahme ab. Wenn Sie a bedingt ausbrechen, werden
<div>
Sie auch irgendwo später ausgeben</div>
. Fügen Sie einfach das Whel-Paar in Ihreif
Erklärung ein:Andernfalls erhalten Sie seltsamen Code wie hier .
quelle
@:
oder<text></text>
if (somecondition) { @:</div> }
<link>
Tags.