簡體   English   中英

在aspx頁面中動態加載用戶控件

[英]dynamically load a user control in the aspx page

我有以下aspx頁面,例如:名為choosemenu.aspx

      <!DOCTYPE html>

 <html xmlns="http://www.w3.org/1999/xhtml">
 <head runat="server">
     <title></title>
 </head>
 <body>
     <form id="form1" runat="server">
         <div>
         </div>
       <div id="renderhere" runat="server">render user control here </div>
     </form>
 </body>
 </html>

我有一個稱為的ascx頁面列表

 english.ascx
 commerce.ascx
 maths.ascx

我必須根據aspx頁中的querystring動態加載aspx頁中的ascx文件。

我在page_load事件的aspx頁面中具有以下內容。

   var control = (English)Page.LoadControl("/ascx/english.ascx");

我將如何在choicemenu.aspx中呈現english.ascx頁面的內容,該內容也在此標記中

另外,我還必須在ascx文件中傳遞一些值。 這是靜態的東西。

   <Menu:MNU ID="english" runat="server" HiLiter="<%#h %>"></Menu:MNU>

從服務器端加載控件

protected void Page_Load(object sender, EventArgs e)
{
    Page.Controls.Add(Page.LoadControl("~/ascx/english.ascx")); //CHECK THE PATH 
}

從服務器端加載控件並將其呈現到div中如果要在特定的div呈現它,則可以編寫:

protected void Page_Load(object sender, EventArgs e)
{
    UserControl uc = (UserControl)Page.LoadControl("~/ascx/english.ascx");
    uc.MyParameter = 1;
    uc.Id = 2;
    uc.someMethodToInitialize();
    div1.Controls.Add(uc);
}

並在您的aspx頁面中:

<div id="div1" runat="server">

</div>

從服務器端加載控件,並使用參數初始化控件

如果control具有帶parametersconstructor parameters ,則必須使用:

public English_Control(int MyParameter,int Id){//在這里編碼。

aspx.cs文件中,您可以使用以下命令進行初始化:

UserControl uc = (UserControl)Page.LoadControl(typeof(English_Control), new object[] {1, 2});
div1.Controls.Add(uc);

為了使控件的回發值可用,必須不遲於PreInit加載和重新加載它。 這是您需要執行的代碼。

    protected override void OnPreInit(EventArgs e)
    {
        string controlToLoad = String.Empty;
        //logic to determine which control to load
        UserControl userControl = (UserControl)LoadControl(controlToLoad);
        renderhere.Controls.Add(userControl);
        base.OnPreInit(e);
    }

根據MSDN

用於“創建或重新創建動態控件”的Pre-Init事件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM