В _Layout.cshtml мы используем PartialView для боковой панели, например:
@{
var menuSideAction = Url.Action(MVC.Common.MenuSide());
}
<div ng-include="'@menuSideAction'">
</div>
Метод контроллера такой:
public virtual ActionResult MenuSide()
{
return PartialView("~/Views/Shared/_MenuSide.cshtml");
}
Проблема, которую ястолкновение с этим подходом состоит в том, что это не предсказуемо, когда Действие выполнено.Иногда он загружается первым при открытии страницы, иногда он загружается только после отображения тела (что для некоторых страниц может занять некоторое время).
Если это вообще возможно, я бы хотел, чтобы страница всегда загружала этоСначала PartialView, но я не нашел способа сделать это.
ОБНОВЛЕНИЕ
Выяснил мою проблему, которую я опубликую в качестве ответа, оказывается, что я слишком много думал (или недооценивал, если выwill) it.
Итак, во-первых, причина, по которой мы использовали здесь ng-include, заключается в том, что наш код AngularJS при частичном просмотре не отвечал без него.Код в контроллере не запускался.
Перед редактированием для использования ng-include у нас была вставлена частичная HTML-страница в _Layout.cshtml, например (упрощенно):
<body ng-controller="commonController">
<div @(ViewBag.AngularController ?? "")>
<div>
@Html.Partial("_MenuSide")
</div>
<div>
@RenderBody()
</div>
</div>
</body>
ViewBag.AngularController устанавливается в определенных представлениях Razor (например, Address.cshtml установил бы его в «ng-controller = addressController»)
Я ожидал, что будет запущен код в «commonController», так как онустановлен на теге.Однако, естественно, значение ViewBag.AngularController переопределяет любой контроллер, установленный в теле.
Исправлено следующее: явное указание ng-controller снова в div в частичном представлении, после чего работал код AngularJS.