Mit der WebForms-Ansichts-Engine verwende ich häufig den ternären Operator für sehr einfache Bedingungen, insbesondere innerhalb von HTML-Attributen. Zum Beispiel:
<a class="<%=User.Identity.IsAuthenticated ? "auth" : "anon" %>">My link here</a>
Der obige Code gibt dem <a>
Tag eine Klasse von auth
oder anon
abhängig davon, ob der Benutzer authentifiziert ist.
Was ist die äquivalente Syntax mit der Razor View Engine? Da für Razor HTML-Tags erforderlich sind, um zu "wissen", wann Code und Markup ein- und ausgeblendet werden müssen, habe ich derzeit folgende Probleme:
@if(User.Identity.IsAuthenticated) { <a class="auth">My link here</a> }
else { <a class="anon">My link here</a> }
Das ist, gelinde gesagt, schrecklich .
Ich würde gerne etwas tun wie dieses, aber ich kämpfen wie in Razor zu verstehen:
<a class="@=User.Identity.IsAuthenticated ? "auth" : "anon";">My link here</a>
- -
Aktualisieren:
In der Zwischenzeit habe ich diesen HtmlHelper erstellt:
public static MvcHtmlString Conditional(this HtmlHelper html, Boolean condition, String ifTrue, String ifFalse)
{
return MvcHtmlString.Create(condition ? ifTrue : ifFalse);
}
was von Razor so genannt werden kann:
<a class="@Html.Conditional(User.Identity.IsAuthenticated, "auth", "anon")">My link here</a>
Trotzdem hoffe ich, dass es eine Möglichkeit gibt, den ternären Operator zu verwenden, ohne auf eine Erweiterungsmethode zurückzugreifen.
quelle
IHtmlString
mit der Methodenew HtmlString("Some stuff here");
für Helfer usw. zurückgeben sollten ...Antworten:
Sie sollten in der Lage sein, die
@()
Ausdruckssyntax zu verwenden :Ich habe Razor jedoch nicht installiert, daher könnte ich mich irren.
quelle
Nachtrag:
Das wichtige Konzept ist, dass Sie einen Ausdruck in Ihrem Razor-Code auswerten. Der beste Weg, dies zu tun (wenn Sie sich beispielsweise in einer foreach-Schleife befinden), ist die Verwendung einer generischen Methode.
Die Syntax zum Aufrufen einer generischen Methode in Razor lautet:
In diesem Fall lautet der Ausdruck:
Daher lautet die Lösung:
Dieser Code kann überall in Razor verwendet werden, nicht nur für ein HTML-Attribut.
Siehe @Kyralessas Kommentar für die C # Razor Syntax-Kurzreferenz (Phil Haacks Blog).
quelle
Eine einfachere Version für einfache Augen!
quelle
Für diejenigen unter Ihnen, die ASP.net mit VB-Rasierer verwenden, ist auch der ternäre Operator möglich.
Es muss sich auch in einem Rasiermesserausdruck befinden:
und der ternäre Operator arbeitet wie folgt:
Das gleiche Codebeispiel, das hier mit VB-Rasierer gezeigt wird, sieht folgendermaßen aus:
Hinweis: Denken Sie beim Schreiben eines TextExpression daran, dass die Booleschen Symbole zwischen C # und VB nicht identisch sind.
quelle
In meinem Problem möchte ich, dass der Ankertext
<a>text</a>
in meiner Ansicht auf einem bestimmten Wert basiert und dieser Text aus der Form abgerufen wirdApp string Resources
Das
@()
ist also die LösungWenn der Text nicht von
App string Resources
verwendet wird, verwenden Sie diesquelle
Sie können auch diese Methode verwenden:
Versuchen Sie dies .. Viel Glück Danke.
quelle