[英]dynamically change a Master Page .. FROM a Master Page?
我有以下代碼:
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不會為母版頁觸發,因為母版頁直到那時才加載,因此可以一次更改與該頁面關聯的母版頁。 然后加載母版頁,並創建一個復合控件樹,然后您將收到母版頁事件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.