Как использовать троичный оператор на странице cshtml. (Razor View Engine) - PullRequest
0 голосов
/ 31 августа 2018

Я работаю со страницами .cshtml. Я хочу показать некоторые HTML условно, получая значение из переменной сеанса. Если я использую условие if else на страницах cshtml, оно работает, но я хочу заменить его на троичный оператор.

Здесь работает код: -

    @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 голосов
/ 31 августа 2018

Если вы хотите использовать троичный оператор, вам нужно сделать пару вещей.

  1. Окружите все это круглыми скобками. Как вы уже написали, ? интерпретируется как текст, а не как оператор. Итак, начните с чего-то вроде этого:

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

  2. Не помещайте открывающие теги внутри оператора (если только вы не вставляете закрывающие теги). Так что переместите теги em наружу вот так.

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

  3. Наконец, убедитесь, что тип возврата одинаков для обеих ветвей. В вашем примере вы пытаетесь вернуть обычную строку в одной части (бит HttpContext), а вторую вы пытаетесь вернуть неразрывный пробел (я предполагаю, что вы не хотите выводить буквальный текст на страницу) , Так что заверните их в HtmlString с.

Итак, когда все это собрано, вы получите что-то вроде этого (ниже приведен пример страницы Razor в веб-приложении .Net Core, на котором я это пробовал, адаптируйтесь к вашим потребностям):

@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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...