对于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>
尽管如此,我还是希望有一种方法可以使用三元操作符,而不用回到扩展方法中。