【问题标题】:passing viewdata to asp.net mvc masterpages将 viewdata 传递给 asp.net mvc 母版页
【发布时间】:2009-03-31 07:27:05
【问题描述】:

我正在尝试将 ViewData 传递给我的 asp.net mvc 母版页,以获得我保留在母版页上的 mvc 用户控件。例如,我创建了一个名称下拉列表作为 mvc 用户控件,并将其放在我的母版页中。

我遇到的问题是将 ViewData 传递给母版页。我从 Microsoft 找到这篇文章,它有一个不错的解决方案,但我想知道是否还有其他“更好”的解决方案。我不喜欢链接中的解决方案的一点是,我必须更改每个控制器以从新的控制器类继承。

http://www.asp.net/learn/MVC/tutorial-13-cs.aspx

编辑:我正在查看的问题是,如果我在我的母版页中放置一个依赖于 ViewData 的用户控件,我必须重复包含该 ViewData对于使用所述母版页的每个页面。上面链接中的解决方案可能是最好的解决方案,但我希望还有其他选择。

【问题讨论】:

    标签: asp.net-mvc master-pages viewdata


    【解决方案1】:

    母版页已经可以访问 ViewData。如果你想要强类型访问它,你需要做两件事:

    1. 将母版页内容放在基类中(例如 CommonViewData)
    2. 您的母版页是否继承自通用 ViewMasterPage 类:

      " %>

    【讨论】:

    【解决方案2】:

    您可以在基本控制器类上使用OnActionExecuting 方法并在那里填充视图数据吗?

    类似:

    protected override void OnActionExecuting(ActionExecutingContext context)
    {
      context.Controller.ViewData.Model = GetDataForControl();
    }
    

    我没有尝试过,所以只是一个想法......

    【讨论】:

      【解决方案3】:

      对于它的价值,我在当前项目中使用该教程中的方法,并且效果很好。

      如果是静态的数据(例如变化不大的菜单),您还可以做的是将对象放在缓存中,这样就不会在每次控制器初始化时调用您的数据库。

      【讨论】:

        【解决方案4】:

        我通常为我的 MasterPage 使用一个抽象控制器类,这是最好的解决方案,因为 MasterPage 就像一个“抽象视图”。但我重写了 MasgerPageController View() 方法以包含视图数据。

        protected override ViewResult View(string viewName, string masterName, object model)
        {
            this.ViewData["menu"] = this.PagesRepository.GetPublishPages();
            return base.View(viewName, masterName, model);
        }
        

        【讨论】:

        • 简洁明了,谢谢!四年后,终于得到了支持;)
        【解决方案5】:

        我不太明白你的问题...

        我正在查看的问题是,如果我在依赖 ViewData 的母版页中放置一个用户控件,我必须为使用所述母版页的每个页面重复包含该 ViewData。

        嗯,是的……你当然知道。如果您的母版页中有用户控件,那么您当然必须为使用该母版页的每个操作和视图传递该用户控件所需的数据。

        如果您只是从基本控制器继承,则不必重复自己。

        您的问题是某些控制器的操作会调用和不调用从该特定母版页派生的视图吗?因此,因此,如果您正在实现一个基本控制器,那么不使用该特定母版页的操作仍将具有它的视图数据......? (如果这一切都有意义的话;-)

        【讨论】:

        • 我问这个问题的全部原因是看看是否有替代我原始问题链接中提供的解决方案的方法。但我猜 MS 会发布他们能想出的“最佳”解决方案。
        【解决方案6】:

        我认为建议的解决方案确实有效,但不是理想的解决方案。如果我们将代码放在 BaseController 构造函数中,即使是没有 MasterPages 的 Action 方法(例如 Post 方法和 Ajax 方法)也会被调用。
        我认为更好的解决方案(不理想)是在母版页中调用 Html.Action 方法。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-09-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-22
          • 2012-01-22
          • 2011-03-20
          相关资源
          最近更新 更多