如何在cshtml页面中使用三元运算符。 (剃刀视图引擎)

时间:2018-08-31 12:53:24

标签: model-view-controller

我正在使用.cshtml页面。 我想通过从Session变量获取值来有条件地显示一些html。 如果我在cshtml页面中使用if else条件,它可以工作,但是我想用三元运算符替换它。

此处正在工作代码:-

    @if (HttpContext.Current.Session["RequestCount"] != null)
     {
       if (HttpContext.Current.Session["RequestCount"].ToString() != "0")
          {
            <li class="nav-item"><a class="nav-link ripple" href="@Url.Action("Images", "Admin")"> <i class="icon-bell-ring" style="position:relative"><em>@HttpContext.Current.Session["RequestCount"].ToString() </em></i><span>Images Request</span> </a> </li> 
          }
       else
          {
            <li class="nav-item"><a class="nav-link ripple" href="@Url.Action("Images", "Admin")"> <i class="icon-bell-ring"></i> <span>Images Request</span> </a> </li>
          }
     }

尝试使用三元运算符:-

  <li class="nav-item"><a class="nav-link ripple" href="@Url.Action("Images","Admin")"> <i class="icon-bell-ring" style="position:relative">@HttpContext.Current.Session["RequestCount"].ToString) != "0" ?<em>@HttpContext.Current.Session["RequestCount"].ToString(): &nbsp; </em></i><span>Images Request</span> </a> </li>

1 个答案:

答案 0 :(得分:1)

如果要使用三元运算符,则需要做几件事。

  1. 用括号将整个内容括起来。如您所写,?被解释为文本,而不是运算符。所以从这样的事情开始:

    @(myCondition ? "a" : "b")

  2. 请勿在操作符中放入开始标签(除非您也将结束标签也放入操作符中)。因此像这样将em标签移到外部。

    <em>@(/* ternary operator here */)</em>

  3. 最后,确保两个分支的返回类型相同。在您的示例中,您尝试在一部分中返回一个常规字符串(HttpContext位),而第二部分中您尝试返回一个不间断的空格(我假设您不希望将文字文本输出到页)。因此,将它们都包裹在HtmlString s中。

因此,当所有内容组合在一起时,您会得到如下信息(下面是我尝试过的.Net Core Web应用程序中的一个Razor示例页面,以适应您的需求):

@using Microsoft.AspNetCore.Html
@{
    bool isTrue = false;
}
<!DOCTYPE html>

<html>
<head>
    <title>title</title>
</head>
<body>
<div>
    <em>@(isTrue ? new HtmlString("hi") : new HtmlString("&nbsp;")) </em>
</div>
</body>
</html>