繁体   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