Con il motore di visualizzazione WebForms, userò comunemente l'operatore ternario per condizioni molto semplici, specialmente all'interno degli attributi HTML. Per esempio:
<a class="<%=User.Identity.IsAuthenticated ? "auth" : "anon" %>">My link here</a>
Il codice precedente fornirà al <a>
tag una classe auth
o in anon
base al fatto che l'utente sia autenticato.
Qual è la sintassi equivalente con il motore di visualizzazione Razor? Poiché Razor richiede tag HTML per "sapere" quando saltare dentro e fuori il codice e il markup, al momento sono bloccato con quanto segue:
@if(User.Identity.IsAuthenticated) { <a class="auth">My link here</a> }
else { <a class="anon">My link here</a> }
Questo è, per dirla in parole povere, terribile .
Mi piacerebbe fare qualcosa del genere , ma faccio fatica a capire come in Razor:
<a class="@=User.Identity.IsAuthenticated ? "auth" : "anon";">My link here</a>
-
Aggiornare:
Nel frattempo, ho creato questo HtmlHelper:
public static MvcHtmlString Conditional(this HtmlHelper html, Boolean condition, String ifTrue, String ifFalse)
{
return MvcHtmlString.Create(condition ? ifTrue : ifFalse);
}
che può essere chiamato così da Razor:
<a class="@Html.Conditional(User.Identity.IsAuthenticated, "auth", "anon")">My link here</a>
Spero comunque che ci sia un modo per usare l'operatore ternario senza ricorrere al suo avvolgimento in un metodo di estensione.
IHtmlString
con il metodonew HtmlString("Some stuff here");
per gli aiutanti, ecc ...