Добавить атрибуты в тег HTML только для определенных видов?

Я работаю над приложением MVC с движком просмотра бритвы.

Теги HTML, Head и Body размещаются в общем представлении _Layout.cshtml, и другие представления используют его в качестве макета.

При поддержке приложения мне нужно добавить пользовательский атрибут на некоторых страницах (не на всех страницах). Если я добавлю атрибут в макет, он появится на всех страницах. Можете ли вы с удовольствием рассказать мне, как добавить атрибут можно только на нужных страницах.

Ниже мой HTML-тег с атрибутом:

<html ng-app="business_rules">

3 ответа

Решение

Вы можете создать макет, где вам нужны все эти атрибуты, и просто использовать этот макет для нужных страниц, используя

@{
   Layout = "Path/To/Layout.cshtml";
}

в верхней части этих страниц.

Для остальных страниц вы будете использовать другой макет без этих атрибутов.

Вы также можете определить макет формы контроллера. Это можно сделать, как показано ниже:

public ActionResult Index()
{
    MyMOdel model = new MyMOdel ();
    //TO DO:
    return View("Index", "_AdminLayout", model);
}

Я бы использовал jquery. Просто добавьте на страницы, где вам нужен этот атрибут, следующий код:

<script>
$(document).ready(function(){
$('html').attr("ng-app", "business_rules")
});
</script>

Я столкнулся с точно такой же проблемой прямо сейчас, и лучшим решением, которое я нашел, было следующее (я не хочу добавлять совершенно отдельный макет только для атрибута в теге body). У вас есть пара предложений на форумах asp net

Я добавил элемент в сумку вида, (вероятно, чрезмерно) универсальный, который называется BodyAttributes:

ViewBag.BodyAttributes = "ng-app=\"moduleName\"";

Затем я отрисовываю это в чистом htlm теге body

<body @Html.Raw(ViewBag.BodyAttributes)>

Это делает ваш макет не специфичным для страницы, и угол не нужно загружать при каждом просмотре. Плюс, то, является ли угол загруженным, теперь контролируется изнутри самого вида, где он принадлежит.

Другие вопросы по тегам