我有以下功能更新加入/加載的是Default.aspx中的佔位符的ASCX定製用戶控件UpdatePanel的內容:自定義用戶控件的內容上按一下按鈕回傳消失
protected void NavigationTab_Click(string ascxpath)
{
Control ctrl = LoadControl(ascxpath);
//cphmaincontent is my asp ContenPlaceHoderId in masterpage
PlaceHolder phmaincontent = (PlaceHolder)cphmaincontent.FindControl("phmaincontent");
phmaincontent.Controls.Clear();
phmaincontent.Controls.Add(ctrl);
upmaincontent.Update();
}
母版的UpdatePanel:
<asp:UpdatePanel ID="upmaincontent" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Label ID="lbmsg" runat="server" Text=""></asp:Label>
<asp:ContentPlaceHolder ID="cphmaincontent" runat="server">
</asp:ContentPlaceHolder>
</ContentTemplate>
</asp:UpdatePanel>
我從我的導航控制是另一個自定義ascx控件,我CTRL控制對象是動態加載每個調用NavigationTab_Click有按鈕和標籤時我點擊按鈕,只需將一些文本重新分配給標籤。
,我有我的母版這下面的代碼只是爲了讓ASCX控制路徑:
protected override void OnInit(EventArgs e)
{
//raising an event to set ascx path
mainmenu.NavigatePath += new usercontrols.mainmenu.NavigationHandler(NavigationTab_Click);
base.OnInit(e);
}
到目前爲止一切正常良好,通過調用NavigationTab_Click功能加載我CTRL對象後,我看到我CTRL佔位符並有按鈕和標籤,但問題是這個,如果我點擊這個按鈕,它應該重新分配一些文本的標籤,但相反,整個Ctrl控制內容消失,請幫助。
,如果我做我的班序列化的話,我不認爲我需要創建的ViewState每個控制我有我保存類對象,然後我把它放回去,並將它們分配給控件權利? – 2012-03-13 21:19:53
另外,我添加了這個「ViewState [」ASCXPATH「] = ascxpath;」在我的「NavigationTab_Click()」,他們都在masterpage.cs,然後我檢查Page_Load()如果ViewState [「ASCXPATH」]!= null然後再次調用相同的函數「NavigationTab_Click(ViewState [」ASCXPATH「]。ToString ))「 但我仍然不能使它加載,因爲當我調試它時,ViewState [」ASCXPATH「]仍然是空的,我認爲它不應該! – 2012-03-13 21:31:41
@NazoTajrian:不要將控件實例存儲在ViewState中,而只需要將這些信息正確地重新創建。其實我還沒有理解你爲什麼要動態地將它們添加到頁面而不是切換它們的'Visible'屬性。你有一個靜態數量的NavigationTabs,不是嗎?如果您可以回答是,請不要動態添加您的UserControl。 – 2012-03-13 21:47:03