最优雅的方法来确保查看_Layout.cshtml的模型数据

jcv*_*dan 12 c# asp.net-mvc-3

在我的应用程序中,我有一些基本的用户信息需要在每个页面上显示(名称,配置文件img).目前我只是将_Layout.cshtml页面中的模型设置为一个被调用的类ApplicationBaseModel,整个应用程序中的每个其他视图模型都必须从该类继承,并且每个操作都必须为基本模型设置适当的数据.

我不介意以这种方式进行简单继承,事实是在每一个动作方法中我都必须检索数据并将其存储在视图模型中.我认为这不是一个非常优雅的解决方案.

任何人对解决这个问题的其他方法有什么想法?

Dan*_*elB 24

我会创建一个BaseController检索Initialize()覆盖中的数据并将其设置为ViewBag属性.现在,从BaseController您的布局中派生您创建的每个Controller ,使用该ViewBag属性来访问您的用户数据.

public class BaseController : Controller
{
    protected override void Initialize(System.Web.Routing.RequestContext requestContext)
    {
        base.Initialize(requestContext);

        // retireve data
        var data = new ApplicationBaseModel();

        // set to viewbag
        ViewBag.UserData = data;
    }
}
Run Code Online (Sandbox Code Playgroud)

这样您就不必从中派生所有模型类ApplicationBaseModel.您可以将强类型视图和用户数据作为ViewBag属性.