嵌套母版页以编程方式更改

时间:2011-01-20 15:27:38

标签: c# asp.net master-pages

我有一个像这样结构的PAGE:

PAGE = MASTER PAGE A + nested MASTER PAGE B of A

MASTER PAGE A:

-----------
Header
-----------
BODY
-----------
Footer
-----------

MASTER PAGE B:

BODY-------------------------------
          |         |             |  
ColumLeft | Content | ColumRight  |
          |         |             |
-----------------------------------

我需要开发的一个功能是能够以编程方式更改嵌套的MASTER PAGE。 例如,用C(包含不同的布局,如2列)更改MASTER PAGE B,使页眉和页脚保持集中。

目前在PAGE上,我使用此代码选择另一个MP,但我无法做到,因为在选择新的嵌套页面时,asp.net会松开对主MASTER PAGE A的引用。

void Page_PreInit(Object sender, EventArgs e)
{
    this.MasterPageFile = "~/NewMaster.master";
}

问题:

  • 知道怎么解决吗?
  • 最好只有一个母版页(1级)并将页眉和页脚包含在另一个tecnic中?如果是,你会建议我什么?

2 个答案:

答案 0 :(得分:0)

在这种情况下,我不会使用嵌套的主页,而只使用一个母版页。对于列,我将使用RenderPartial或RenderAction。它不像你想要的那样干,因为你需要在每个视图中添加RenderPartial(“LeftColumn”),所以我理解你的问题,但这就是我的方式。

注意:RenderAction在MVC中是可用的。有关它的文章,请参见: http://haacked.com/archive/2009/11/18/aspnetmvc2-render-action.aspx

答案 1 :(得分:0)

为了以编程方式更改MasterPage,您必须在xml / html页面中的页面注册链接之后立即指定其类型。

<%@ Page Language="C#" 
    MasterPageFile="~/MasterPage.master" 
    AutoEventWireup="false" 
    CodeFile="MyCodeFile.aspx.cs" 
    Inherits="MyCodeFile"
    title="Untitled Page" %>
<%@ MasterType 
    virtualpath="~/MasterPage.master" 
%>

我不建议使用此架构来实现您想要实现的目标,但这就是您要做的。