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

借助WebForms视图引擎,我通常将三元运算符用于非常简单的条件,尤其是在HTML属性中。 例如:

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

上面的代码将根据用户是否通过身份验证为<a>标记提供authanon类。

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>

不过,我希望有一种使用三元运算符的方法,而不必退一步将其包装在扩展方法中。


#1楼

对于将ASP.net与VB剃刀一起使用的人,也可以使用三元运算符。

它也必须在剃须刀表达内:

@(Razor_Expression)

三元运算符的工作方式如下:

If(BooleanTestExpression, "TruePart", "FalsePart")

此处显示的使用VB剃须刀的相同代码示例如下所示:

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

注意:编写TextExpression时,请记住C#和VB之间的布尔符号不同。


#2楼

在我的问题中,我希望视图中的锚点<a>text</a>基于某个值,并且该文本是从App string Resources检索的

所以,这个@()是解决方案

<a href='#'>
      @(Model.ID == 0 ? Resource_en.Back : Resource_en.Department_View_DescartChanges)
</a>

如果文本不是来自App string Resources使用此

@(Model.ID == 0 ? "Back" :"Descart Changes")

#3楼

您也可以使用以下方法:

<input type="text" class="@(@mvccondition ? "true-class" : "false-class")">

试试这个..祝你好运谢谢。


#4楼

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

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

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


#5楼

附录:

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

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

@(expression)

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

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

因此,解决方案是:

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

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

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


#6楼

一个简单的版本,让眼睛更轻松!

@(true?"yes":"no")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值