【发布时间】:2019-06-30 07:53:50
【问题描述】:
在 _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");
}
我在使用这种方法时遇到的一个问题是,在执行 Action 时它是不可预测的。有时它在打开页面时首先加载,有时它仅在渲染 Body 后加载(对于某些页面可能需要一些时间)。
如果可能的话,我想强制页面始终首先加载此 PartialView,但我还没有找到这样做的方法。
更新
找出我的问题并将其作为答案发布,结果证明我想多了(或者如果你愿意的话)。
首先,这里使用 ng-include 的原因是因为我们在局部视图上的 AngularJS 代码没有它就没有响应。控制器中的代码没有被触发。
在使用 ng-include 进行编辑之前,我们在 _Layout.cshtml 中插入了部分 HTML 页面,如下所示(简化):
<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 的值会覆盖在主体上设置的任何控制器。
修复方法是在局部视图的 div 中再次显式指定 ng-controller,然后 AngularJS 代码就可以工作了。
【问题讨论】:
标签: c# asp.net angularjs razor model-view-controller