借助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> }
坦率地说,这是可怕的。
我很想做一些喜欢这一点,但我在努力了解如何在剃刀:
<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");
等返回类型……