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コントロールであるナビゲーションコントロールからNavigationTab_Clickを呼び出しています。ボタンをクリックすると、ラベルにテキストが再割り当てされるだけで、それぞれに動的に読み込まれるctrlコントロールオブジェクトにボタンとラベルがあります。
そして、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コントロールのコンテンツ全体が消えます。助けてください。