How to use ternary operator in razor (specifically on HTML attributes)?
使用WebForms视图引擎,我通常会使用三元运算符来处理非常简单的条件,特别是在HTML属性中。 例如:
1 | ">My link here |
上面的代码将为
Razor视图引擎的等效语法是什么? 因为Razor需要HTML标签来"知道"何时跳入和跳出代码和标记,所以我现在仍然坚持以下内容:
1 2 | @if(User.Identity.IsAuthenticated) { My link here } else { My link here } |
温和地说,这很可怕。
我很想做这样的事情,但我很难理解Razor:
1 | My link here |
-
更新:
与此同时,我创建了这个HtmlHelper:
1 2 3 4 | public static MvcHtmlString Conditional(this HtmlHelper html, Boolean condition, String ifTrue, String ifFalse) { return MvcHtmlString.Create(condition ? ifTrue : ifFalse); } |
这可以从Razor这样调用:
1 | My link here |
尽管如此,我希望有一种方法可以使用三元运算符而不会退回到扩展方法中。
您应该能够使用
1 | My link here |
我没有安装Razor,所以我错了。
附录:
重要的概念是您正在评估Razor代码中的表达式。执行此操作的最佳方法(例如,如果您处于foreach循环中)是使用泛型方法。
在Razor中调用泛型方法的语法是:
1 | @(expression) |
在这种情况下,表达式为:
1 | User.Identity.IsAuthenticated ?"auth" :"anon" |
因此,解决方案是:
1 | @(User.Identity.IsAuthenticated ?"auth" :"anon") |
此代码可以在Razor中的任何位置使用,而不仅仅用于html属性。
请参阅@Kyralessa对C#Razor语法快速参考(Phil Haack的博客)的评论。
更简单的版本,轻松的眼睛!
1 | @(true?"yes":"no") |
对于那些使用带有VB razor的ASP.net的人来说,三元运算符也是可能的。
它也必须在一个剃刀表达式内:
1 | @(Razor_Expression) |
三元运算符的工作原理如下:
1 | If(BooleanTestExpression,"TruePart","FalsePart") |
这里用VB razor显示的相同代码示例如下所示:
1 | My link here |
注意:在编写TextExpression时,请记住C#和VB之间的布尔符号不一样。
您也可以使用此方法:
1 | <input type="text" class="@(@mvccondition ?"true-class" :"false-class")"> |
试试这个 ..
祝好运
谢谢。
在我的问题中,我希望视图中的锚
并且从
所以,这个
1 | @(Model.ID == 0 ? Resource_en.Back : Resource_en.Department_View_DescartChanges) |
如果文本不是来自
1 | @(Model.ID == 0 ?"Back" :"Descart Changes") |