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.
razor
asp.net-mvc-3
Portman
źródło
źródło
IHtmlString
z pomocą metodynew HtmlString("Some stuff here");
dla pomocników itp.Odpowiedzi:
Powinieneś być w stanie użyć
@()
składni wyrażenia:Jednak nie mam zainstalowanej Razor, więc mogę się mylić.
źródło
Uzupełnienie:
Ważna koncepcja polega na tym, że oceniasz wyrażenie w kodzie Razor. Najlepszym sposobem na to (jeśli na przykład jesteś w pętli foreach) jest użycie metody ogólnej.
Składnia wywołania metody ogólnej w Razor jest następująca:
W takim przypadku wyrażenie to:
Dlatego rozwiązaniem jest:
Tego kodu można używać w dowolnym miejscu w Razor, nie tylko w przypadku atrybutu HTML.
Zobacz komentarz @ Kyralessa dla C # Razor Syntax Quick Reference (blog Phila Haacka).
źródło
Prostsza wersja, dla łatwych oczu!
źródło
Dla tych, którzy używają ASP.net z maszynką VB, operator trójskładnikowy jest również możliwy.
Musi również znajdować się w wyrazie brzytwy:
a operator trójskładnikowy działa w następujący sposób:
Ten sam przykład kodu pokazany tutaj z maszynką VB wygląda następująco:
Uwaga: pisząc TextExpression pamiętaj, że symbole logiczne nie są takie same między C # i VB.
źródło
w moim problemie chcę, aby tekst zakotwiczenia
<a>text</a>
w moim widoku opierał się na pewnej wartości i ten tekst został pobrany z postaciApp string Resources
więc to
@()
jest rozwiązaniejeśli tekst nie pochodzi z,
App string Resources
użyj tegoźródło
Możesz także użyć tej metody:
Spróbuj tego .. Powodzenia Dzięki.
źródło