C# 在MVC中,在多个HTML助手之间共享布局对象的最佳方式是什么
我是.NETMVC新手,正在寻找这个问题的代码或非代码答案。我的web应用程序将有数百个控制器、部分控制器等。所有控制器将共享一个公共布局。我当前正在从页面的控制器向ViewBag添加一个菜单对象 我想知道在MVC布局视图中多次重复使用对象的最佳实践是什么,类似于下面示例中的菜单对象C# 在MVC中,在多个HTML助手之间共享布局对象的最佳方式是什么,c#,model-view-controller,controller,C#,Model View Controller,Controller,我是.NETMVC新手,正在寻找这个问题的代码或非代码答案。我的web应用程序将有数百个控制器、部分控制器等。所有控制器将共享一个公共布局。我当前正在从页面的控制器向ViewBag添加一个菜单对象 我想知道在MVC布局视图中多次重复使用对象的最佳实践是什么,类似于下面示例中的菜单对象 @Html.Header(ViewBag.Menu as IR.Web.Portal.Models.Navigation.Menu) @Html.SideNav(ViewBag.Menu as IR.Web.Por
@Html.Header(ViewBag.Menu as IR.Web.Portal.Models.Navigation.Menu)
@Html.SideNav(ViewBag.Menu as IR.Web.Portal.Models.Navigation.Menu)
@Html.Footer(ViewBag.Menu as IR.Web.Portal.Models.Navigation.Menu)
我只想初始化对象一次,但要多次使用它
我不想为每个控制器添加代码以使其工作。继承基本控制器可能是一个好的解决方案
菜单对象不需要像我的示例中那样位于ViewBag中
对于站点的每个用户,菜单对象都是不同的。因此,静态类或单例类可能不在考虑范围之内
身份验证和日志记录非常适合控制器基础。但是,我认为创建自定义PageBaseType也是一个好主意。有很多事情一个页面应该做,但不是一个控制器。。。主题、徽标、布局、加载脚本、可能获取菜单等 将以下内容添加到\Views\Web.config:
<system.web.webPages.razor>
<pages pageBaseType="MyPageBase">
</system.web.webPages.razor>
创建一个类:
public abstract class MyPageBase<T> : WebViewPage<T>
{
protected override void InitializePage()
{
ViewBag.Menu = new Menu();
base.InitializePage();
}
}
是否在Global.asax中添加GloablFilter?每个控制器是否继承一个基本控制器?在用户会话中存储对象?是否创建自定义pageBaseType?还有其他建议吗?