【问题标题】:Where to put master page's code in an MVC application?在 MVC 应用程序中将母版页代码放在哪里?
【发布时间】:2010-09-08 19:10:39
【问题描述】:

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

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

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

有没有办法在不手动将 ViewData 传递/Action 调用连接到母版页或对框架进行子类化的情况下干净地做到这一点?

文档的数量非常少...而且我对这一切都很陌生,包括 MVC 本身的概念,所以请分享您的提示/技术。

【问题讨论】:

    标签: asp.net-mvc master-pages


    【解决方案1】:

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

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

    我希望这会有所帮助!

    问候

    【讨论】:

      【解决方案2】:

      很好的问题。您有多种选择。

      1. 在您的母版页上进行 jQuery 调用,从控制器中获取您需要的数据,然后再次使用 jQuery 填充您的字段。
      2. 您的第二个选择是创建用户控件,这些控件可以自己调用控制器来填充其信息。

      我认为最好的选择是为您的母版页中需要填充数据的区域创建控件。从而让您的母版页严格包含设计元素。祝你好运。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 可能想改用那个 BaseViewData :-)
        猜你喜欢
        • 2010-10-11
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多