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.
IHtmlString
mit der Methodenew HtmlString("Some stuff here");
für Helfer usw. zurückgeben sollten ...