我正在使用.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(): </em></i><span>Images Request</span> </a> </li>
答案 0 :(得分:1)
如果要使用三元运算符,则需要做几件事。
用括号将整个内容括起来。如您所写,?
被解释为文本,而不是运算符。所以从这样的事情开始:
@(myCondition ? "a" : "b")
请勿在操作符中放入开始标签(除非您也将结束标签也放入操作符中)。因此像这样将em
标签移到外部。
<em>@(/* ternary operator here */)</em>
最后,确保两个分支的返回类型相同。在您的示例中,您尝试在一部分中返回一个常规字符串(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(" ")) </em>
</div>
</body>
</html>