将母版页代码放在MVC应用程序中的哪里?

时间:2020-03-05 18:52:42  来源:igfitidea点击:

我在ASP.NET MVC应用程序中使用了几个(2或者3个)母版页,它们每个都必须显示数据库中的信息。例如赞助商列表,当前资金状况等。

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

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

有没有一种方法可以干净地实现,而无需将ViewData pass / Action调用手动连接到母版页或者将框架的子类化?

文档数量非常少...而且我对所有这些都是新手,包括MVC本身的概念,因此,请就此分享技巧/技术。

解决方案

回答

一种方法是在母版页视图中放入ViewData的钩子,然后定义一个BaseController:Controller(或者多个基类),在其中执行所需的所有数据库调用。

我们要执行的操作与本文中描述的完全相同。

我希望这有帮助!

问候

回答

如果我们不介意使用强类型的视图数据,则可以将所有母版页数据放在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填充字段。
  • 第二个选择是创建用户控件,这些控件自己调用控制器以填充其信息。

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