代码之家  ›  专栏  ›  技术社区  ›  Portman

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

  •  368
  • Portman  · 技术社区  · 14 年前

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

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

    上面的代码将给出 <a> auth anon 取决于用户是否经过身份验证。

    @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);
    }
    

    从剃须刀上可以这样称呼:

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

    不过,我还是希望有一种方法可以使用三元运算符,而不必回头用扩展方法包装它。

    6 回复  |  直到 14 年前
        1
  •  743
  •   maxshuty Fatih Hayrioğlu    8 年前

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

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

    不过,我没有安装剃须刀,所以我可能错了。

        2
  •  53
  •   awrigley    13 年前

    重要的概念是,您正在Razor代码中计算表达式。最好的方法(例如,如果您在foreach循环中)是使用泛型方法。

    在Razor中调用泛型方法的语法是:

    @(expression)
    

    在本例中,表达式为:

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

    因此,解决办法是:

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

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

        3
  •  20
  •   Monsters X    13 年前

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

    @(true?"yes":"no")
    
        4
  •  17
  •   John Saunders    9 年前

    对于那些使用ASP.net和VB razor的用户,也可以使用三元运算符。

    它一定也在剃刀的表情里:

    @(Razor_Expression)
    

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

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

    VB razor的代码示例如下所示:

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

        5
  •  1
  •   Basheer AL-MOMANI    8 年前

    在我的问题上,我想要主播的文字 <a>text</a> 在我看来是基于某种价值的 文本是从 App string Resources

    @() 是解决办法

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

    如果文本不是来自 用这个

    @(Model.ID == 0 ? "Back" :"Descart Changes")
    
        6
  •  0
  •   Arjun    8 年前

    也可以使用此方法:

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

    祝你好运