Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在MVC中,在多个HTML助手之间共享布局对象的最佳方式是什么_C#_Model View Controller_Controller - Fatal编程技术网

C# 在MVC中,在多个HTML助手之间共享布局对象的最佳方式是什么

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

我是.NETMVC新手,正在寻找这个问题的代码或非代码答案。我的web应用程序将有数百个控制器、部分控制器等。所有控制器将共享一个公共布局。我当前正在从页面的控制器向ViewBag添加一个菜单对象

我想知道在MVC布局视图中多次重复使用对象的最佳实践是什么,类似于下面示例中的菜单对象

@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?还有其他建议吗?