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

使用WebForms视图引擎,我将通常使用三元运算符来创build非常简单的条件,特别是在HTML属性中。 例如:

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

上面的代码将给<a>标签一个authanon的类,这取决于用户是否被authentication。

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> 

更新:

与此同时,我创build了这个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> 

不过,我希望有一种方法来使用三元运算符,而不会退步到包装扩展方法。

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

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

虽然我没有安装razor,所以我可能是错的。

附录:

重要的概念是您正在评估Razor代码中的expression式。 这样做的最好方法(例如,如果你在一个foreach循环)是使用一个通用的方法。

在Razor中调用generics方法的语法是:

 @(expression) 

在这种情况下,expression式是:

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

所以解决的办法是:

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

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

请参阅@Kyralessa对C#Razor语法快速参考(Phil Haack的博客)的评论。

一个简单的版本,容易眼睛!

 @(true?"yes":"no") 

对于那些谁使用VB.netrazor的三维运营商也是可能的。

它也必须是一个剃刀的expression:

 @(Razor_Expression) 

三元运算符的工作原理如下:

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

在这里用VB剃刀显示相同的代码示例如下所示:

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

注意:当写一个TextExpression时,记住C#和VB之间的布尔符号是不一样的。

在我的问题,我想我的视图内锚锚<a>text</a>是基于一些价值和文本检索formsApp string Resources

所以,这个@()是解决scheme

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

如果文本不是从App string Resources使用这个

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

你也可以使用这个方法:

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

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