我有以下代码:
public abstract class BasePage : Page
{
protected void Page_PreInit(object sender, EventArgs e)
{
if (IsPostBack)
return;
var section = ConfigurationManager.GetSection("UrlRewriter/PlainRules");
if (section == null)
SetMaster("~/App_Shared/Master/BaseRegular.Master");
else
SetMaster("~/App_Shared/Master/BaseRewritable.Master");
}
protected void SetMaster(string value)
{
MasterPage master = Master;
while (master != null)
{
if (master is SharedMaster)
{
master.MasterPageFile = value;
break;
}
master = master.Master;
}
}
}
动态更改母版页效果很好,但我希望能够直接从 SharedMaster
执行此操作,而不是从我拥有的每个页面执行此操作。
如果放在主页上,Page_PreInit 永远不会触发,那么我该如何实现呢?
最佳答案
如果您将此功能放在 BasePage
中,然后从 BasePage
继承您的每个页面,那么您不必在每个页面中重复代码。您似乎已经有了完美的工作代码。
就将逻辑放在母版页中而言,这是不可能的 - 因为一旦母版页与页面相关联并且控件树已加载,您就无法更改母版页。 pre_init 不会触发母版页,因为母版页直到那时才加载,因此一旦可以更改与页面关联的母版页。然后加载母版页并创建复合控件树,之后您将收到母版页事件。
关于c# - 动态更改母版页 .. 从母版页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6420054/