【问题标题】:masterpage module override母版页模块覆盖
【发布时间】:2009-04-06 19:49:40
【问题描述】:

我有一个通过 PreInit() 上的 HTTPModule 设置的母版页。欢乐时光!问题是由于布局问题,我需要覆盖几页上的 masterpagefile 值。有人知道最好的方法吗?

我尝试在我的页面上添加一个 Page_Preinit,但它在我的模块中的 PreInit() 之前执行,所以它最终在那里被重置。我在想也许我应该在我的页面中更新一个上下文变量(类似于我可能在我的模块中分支出来的 masterSetAtPage).. 对此有什么想法吗?

我在 VB.Net 中工作,但 C# 示例也可以。

【问题讨论】:

  • 能否更新 PreInit 代码以指定您需要的母版页,还是需要根据正在加载的内容更新母版页?
  • 你能更详细地描述你想做什么吗?最大的障碍通常是让 PreInit 成功设置 Masterpage,为什么不直接设置它,或者设置另一个?

标签: .net asp.net master-pages httpmodule


【解决方案1】:

大概你当前的代码看起来有点像这里描述的代码......

http://www.odetocode.com/articles/450.aspx

如果是这样,那么您可以将连接 PreInit 的代码更改为如下所示...

if (page != null && String.IsNullOrEmpty(page.MasterPageFile))
{
    page.MasterPageFile = "~/Master1.master";
}

然后任何使用它自己的页面指令来设置母版页文件的页面都将避免被连接到“默认”母版页。

如果您需要以编程方式执行此操作,那么此代码...

protected override void OnPreInit(EventArgs e)
{
    base.OnPreInit(e);
    this.MasterPageFile = "cheese.master";
}

... 在您的页面代码中可以解决问题。显然,此代码只会添加到需要特殊行为的页面中。

【讨论】:

  • 看起来不错,但是我实际上需要以编程方式设置master,所以我不能在page指令中设置静态值。
  • 好的,这样做... protected override void OnPreInit(EventArgs e) { base.OnPreInit(e); this.MasterPageFile = "cheese.master"; } ...在您的页面中应该可以工作。我知道这几乎就是 Mark 所建议的(上图)——尽管他展示的是 OnInit 而不是 OnPreInit。
  • @Martin - 是的,我把那个拉走了。 ;) PreInit 是正确的地方。
猜你喜欢
  • 1970-01-01
  • 2015-01-03
  • 1970-01-01
  • 1970-01-01
  • 2011-08-26
  • 2014-08-25
  • 2015-06-17
  • 2011-02-21
  • 1970-01-01
相关资源
最近更新 更多