为了账号安全,请及时绑定邮箱和手机立即绑定

如何在剃须刀中使用三元运算符(特别是在HTML属性上)?

如何在剃须刀中使用三元运算符(特别是在HTML属性上)?

肥皂起泡泡 2019-11-22 12:55:38
借助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>不过,我希望有一种使用三元运算符的方法,而不必退一步将其包装在扩展方法中。
查看完整描述

3 回答

?
萧十郎

TA贡献1815条经验 获得超12个赞

您应该能够使用@()表达式语法:


<a class="@(User.Identity.IsAuthenticated ? "auth" : "anon")">My link here</a>

不过,我没有安装Razor,所以我可能是错的。


查看完整回答
反对 回复 2019-11-22
?
暮色呼如

TA贡献1853条经验 获得超9个赞

附录:

重要的概念是您正在评估Razor代码中的表达式。最好的方法(例如,如果您处于foreach循环中)是使用通用方法。


在Razor中调用通用方法的语法为:


@(expression)

在这种情况下,表达式为:


User.Identity.IsAuthenticated ? "auth" : "anon"

因此,解决方案是:


@(User.Identity.IsAuthenticated ? "auth" : "anon")

此代码可以在Razor中的任何地方使用,而不仅仅是html属性。


有关C#Razor语法快速参考,请参见@Kyralessa的评论(Phil Haack的博客)。


查看完整回答
反对 回复 2019-11-22
  • 3 回答
  • 0 关注
  • 463 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信