[英]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
具有带parameters
的constructor
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.