如何在cshtml页面中使用三元运算符。 (Razor View Engine)

问题描述 投票:0回答:1

我正在使用.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>
model-view-controller
1个回答
1
投票

如果要使用三元运算符,则需要执行一些操作。

  1. 用括号括起整个事物。正如你所写,?被解释为文本,而不是运算符。所以从这样的事情开始: @(myCondition ? "a" : "b")
  2. 不要在操作员内部放置开口标签(除非你也将开关标签放入)。所以像这样移动em标签。 <em>@(/* ternary operator here */)</em>
  3. 最后,确保两个分支的返回类型相同。在你的例子中,你试图在一个部分(HttpContext位)返回一个常规字符串,第二个你试图返回一个不间断的空格(我假设你不希望文字文本输出到页面)。所以将它们都包装在HtmlStrings中。

因此,当它们全部组合在一起时,您会得到类似这样的内容(下面是我尝试过的.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>
© www.soinside.com 2019 - 2024. All rights reserved.