За допомогою механізму перегляду WebForms я зазвичай використовую потрійний оператор для дуже простих умов, особливо в межах атрибутів HTML. Наприклад:
<a class="<%=User.Identity.IsAuthenticated ? "auth" : "anon" %>">My link here</a>
Вищевказаний код дасть <a>
тегу клас auth
або anon
залежно від того, автентифіковано користувача.
Який еквівалентний синтаксис із механізмом подання Razor? Оскільки Razor вимагає тегів HTML, щоб "знати", коли ввійти та вийти з коду та розмітки, я наразі зациклювався на наступному:
@if(User.Identity.IsAuthenticated) { <a class="auth">My link here</a> }
else { <a class="anon">My link here</a> }
Це, м’яко кажучи, жахливо .
Я хотів би зробити щось подібне , але я намагаюся зрозуміти, як у Razor:
<a class="@=User.Identity.IsAuthenticated ? "auth" : "anon";">My link here</a>
-
Оновлення:
Тим часом я створив цей HtmlHelper:
public static MvcHtmlString Conditional(this HtmlHelper html, Boolean condition, String ifTrue, String ifFalse)
{
return MvcHtmlString.Create(condition ? ifTrue : ifFalse);
}
який можна назвати так від Razor:
<a class="@Html.Conditional(User.Identity.IsAuthenticated, "auth", "anon")">My link here</a>
Але я сподіваюся, що існує спосіб використовувати потрійний оператор без відкидання, щоб обернути його методом розширення.
IHtmlString
із методомnew HtmlString("Some stuff here");
для помічників тощо ...