Самый простой способ иметь встроенные блоки кода с использованием механизма просмотра ASP.NET Razor? - PullRequest
13 голосов
/ 16 ноября 2010

Это работает:

<li @{if (Model.Mode == "map") {<text> class="bselected"</text>}}>@Html.ActionLink("Map & Directions", MVC.Biz.Show(Model.SingleBiz.BizName, "map", string.Empty))</li>

Но это уродливо ... Есть ли лучший, более чистый способ сделать это? в этом коде я проверяю, являются ли некоторые данные представления пустыми или нет, если это так, добавьте класс.

Или есть другой метод, позволяющий добиться этого лучше?

Ответы [ 5 ]

15 голосов
/ 21 ноября 2010

Вчера я опубликовал несколько Html Extension методов, которые обрабатывают такие вещи:

Как кратко создать необязательные атрибуты HTML с механизмом просмотра бритвы?

Используя этот подходдаст вам следующий синтаксис Razor:

<li @Html.Css("selected", Model.Mode == "map" )>STUFF</li>

ПРИМЕЧАНИЕ: вы можете связать атрибуты вместе, чтобы создать значения атрибута на основе нескольких условий.Например:

<li @Html.Css("selected", true).Add("winner", false).Add("last", true)>STUFF</li>

будет выводить:

<li class="selected last">STUFF</li>

Кроме того, если значение результирующего атрибута пусто, атрибут свернется, чтобы сохранить ваш HTML аккуратным.

12 голосов
/ 16 ноября 2010

Или вы можете сделать что-то вроде этого:

@{
    var cssClass = (Model.Mode == "map") ? "selected" : "";
}

<li class="@cssClass">@Html.ActionLink("Map & Directions", MVC.Biz.Show(Model.SingleBiz.BizName, "map", string.Empty))</li>
2 голосов
/ 18 ноября 2010

Использование метода в разделе @functions:

@functions{
   public HtmlString Li(bool selected, IHtmlString template) {
      var result = string.Format("<li{0}>{1}</li>",
         selected ? " class='selected'" : "")),
         template);
      return new HtmlString(result);
   }
}

@* ... *@

@Li(Model.Mode == "map", Html.ActionLink("Map & Directions", MVC.Biz.Show(Model.SingleBiz.BizName, "map", string.Empty)))
2 голосов
/ 18 ноября 2010

Как насчет использования троичного оператора для вычисления выражения следующим образом:

<li @(Model.Mode == "map" ? "class='bselected' : "")>@Html.ActionLink("Map & Directions", MVC.Biz.Show(Model.SingleBiz.BizName, "map", string.Empty))</li> 
0 голосов
/ 16 ноября 2010

Я бы, наверное, сказал, что вы можете просто добавить класс к вашей модели

<li class="@Model.Selected">@Html.ActionLink("Map & Directions", MVC.Biz.Show(Model.SingleBiz.BizName, "map", string.Empty))</li>

Это бы очистило ...

Удален второй пример, так как я понял, что он не будет работать

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