W silniku widoku WebForms często używam operatora trójskładnikowego do bardzo prostych warunków warunkowych, szczególnie w atrybutach HTML. Na przykład:
<a class="<%=User.Identity.IsAuthenticated ? "auth" : "anon" %>">My link here</a>
Powyższy kod nadaje <a>
tagowi klasę auth
lub anon
zależy od tego, czy użytkownik jest uwierzytelniony.
Jaka jest równoważna składnia z silnikiem widoku Razor? Ponieważ Razor wymaga tagów HTML, aby „wiedzieć”, kiedy wskoczyć i wyskoczyć z kodu i znaczników, obecnie mam problem z:
@if(User.Identity.IsAuthenticated) { <a class="auth">My link here</a> }
else { <a class="anon">My link here</a> }
Jest to, delikatnie mówiąc, okropne .
Chciałbym zrobić coś takiego , ale staram się zrozumieć, jak w Razor:
<a class="@=User.Identity.IsAuthenticated ? "auth" : "anon";">My link here</a>
-
Aktualizacja:
W międzyczasie utworzyłem ten HtmlHelper:
public static MvcHtmlString Conditional(this HtmlHelper html, Boolean condition, String ifTrue, String ifFalse)
{
return MvcHtmlString.Create(condition ? ifTrue : ifFalse);
}
które można nazwać tak z Razor:
<a class="@Html.Conditional(User.Identity.IsAuthenticated, "auth", "anon")">My link here</a>
Mam jednak nadzieję, że istnieje sposób na użycie operatora trójskładnikowego bez wracania do pakowania go w metodę rozszerzenia.
IHtmlString
z pomocą metodynew HtmlString("Some stuff here");
dla pomocników itp.