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

时间:2008-09-13 13:05:04

标签: asp.net-mvc master-pages

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

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

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

有没有办法干净地没有连接ViewData传递/手动调用主页或子类化框架'?

文档量非常低......我对这一切都很陌生,包括MVC本身的概念,所以请分享你的提示/技巧。

3 个答案:

答案 0 :(得分:5)

执行此操作的一种方法是在主页面视图中放入ViewData的挂钩,然后定义一个BaseController:Controller(或多个基类),您可以在其中执行所需的所有数据库调用。

你想做的事与this文章中描述的完全相同。

我希望这有帮助!

此致

答案 1 :(得分:1)

好问题。您有几种选择。

  1. 在您的母版页上进行jQuery调用,从控制器中获取所需数据,然后再次使用jQuery填充字段。
  2. 您的第二个选择是创建用户控件,让他们自己调用控制器来填充他们的信息。
  3. 我认为最好的选择是为您的母版页区域创建控件,该区域包含需要填充的数据。因此,让您的母版页严格包含设计元素。祝好运。

答案 2 :(得分:0)

如果您不介意强类型视图数据,可以将所有母版页数据放在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);
}