Asp.net mvc 在何处放置母版页';MVC应用程序中的代码?

Asp.net mvc 在何处放置母版页';MVC应用程序中的代码?,asp.net-mvc,master-pages,Asp.net Mvc,Master Pages,我在ASP.NETMVC应用程序中使用了几个(2或3)母版页,每个母版页都必须显示数据库中的一些信息。如赞助商名单、当前资金状况等 所以我的问题是,我应该把这些母版页数据库调用代码放在哪里 通常,这些应该进入它自己的控制器类,对吗?但这意味着我必须手动连接它们(例如,传递ViewData),因为它超出了MVC框架提供的正常路由框架 有没有一种方法可以在不将ViewData传递/操作调用手动连接到母版页或子类化框架的情况下干净地实现这一点 文档的数量非常少。。。我对所有这些都很陌生,包括MVC本身

我在ASP.NETMVC应用程序中使用了几个(2或3)母版页,每个母版页都必须显示数据库中的一些信息。如赞助商名单、当前资金状况等

所以我的问题是,我应该把这些母版页数据库调用代码放在哪里

通常,这些应该进入它自己的控制器类,对吗?但这意味着我必须手动连接它们(例如,传递ViewData),因为它超出了MVC框架提供的正常路由框架

有没有一种方法可以在不将ViewData传递/操作调用手动连接到母版页或子类化框架的情况下干净地实现这一点


文档的数量非常少。。。我对所有这些都很陌生,包括MVC本身的概念,所以请分享您在这方面的技巧。

一种方法是在母版页中查看ViewData的挂钩,然后定义一个BaseController:Controller(或多个基类),在这里您可以执行所需的所有db调用

你想做的和文章中描述的完全一样

我希望这有帮助


关于

如果不介意强类型视图数据,可以将所有母版页数据放在viewData的公共基类中。可以在基类的构造函数中设置此数据。然后,所有需要额外数据的视图都需要从该基类继承的强类型viewdata

要允许在没有任何显式viewdata的情况下在控制器中调用View(),您可以覆盖ControllerBase中的View:

protected override ViewResult View(string viewName, string masterName, object model)
{
    if (model == null)
    {
        model = new ViewDataBase();
    }
    return base.View(viewName, masterName, model);
}

好问题。你有几个选择

  • 在母版页上调用jQuery,从控制器获取所需的数据,然后再次使用jQuery填充字段
  • 第二个选项是创建用户控件,这些控件自己调用控制器来填充其信息

  • 我认为最好的选择是为母版页中需要填充数据的区域创建控件。因此,母版页必须严格包含设计元素。祝你好运

    可能需要将其称为BaseViewData:-)