【问题标题】:Dynamically assigning master pages using MVC使用 MVC 动态分配母版页
【发布时间】:2010-06-16 06:51:00
【问题描述】:

当使用网络表单时,将母版页动态分配给页面的适当位置似乎是页面 PreInit 事件:

this.Master.MasterPageFile = "~/leaf.Master"

如果需要,嵌套母版页层次结构中的母版页也可以在这里设置:

this.Master.MasterPageFile = "~/leaf.Master"
this.Master.Master.MasterPageFile = "~/root.Master"

使用 MVC 框架,您可以使用控制器 View 方法通过传递 masterName 动态设置单个母版页名称,但是如何设置层次结构中更高的其他母版页?

更新
对不起,我不清楚。

我所说的层次结构是指嵌套母版页链,那么如何在嵌套母版页链中设置最顶层的母版页?

例如,我们有一个设置,不同的客户类型有不同的母版页,并且嵌套在该母版页中的是特定用户角色的附加母版页。我们需要动态设置 root 客户 master 以及角色 master。

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    您所说的“在层次结构中更高”的意思并不完全清楚,但如果您的意思是“在一个地方,而不是在我创建的每个控制器中”,我可以想到两种选择:

    1. 创建一个抽象控制器超类型并从中继承您的具体控制器。

    2. Create a controller factory(子类 DefaultControllerFactory),并覆盖 CreateController 以设置自定义 MasterPage 属性。

    如果选择后一种方案,则需要在 Global.asax 中进行:

      ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory());
    

    【讨论】:

    • 控制器不直接设置母版页,因为它们永远无法直接访问视图。
    • 我知道。但请完整阅读他的问题,其中他解释了他想做什么。
    • 我认为你错过了我的观点。您在谈论控制器,就好像控制器可以访问实际视图一样。他们不。您的解决方案实际上不起作用。
    • 布拉德,我再次理解您的意思,但请完整阅读他的信息,尤其是代码示例(控制器没有 Master 属性; ViewPage 有)。他想通过 ViewData 向视图传递一个主名称并在视图中使用它,而不是直接在视图上设置属性。
    【解决方案2】:

    今天在 MVC 中没有这种功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多