С механизмом просмотра 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>
-
Update:
Тем временем я создал этот 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>
Тем не менее, я надеюсь, что есть возможность использовать тернарный оператор, не откидываясь назад, чтобы обернуть его в метод расширения.