我有以下aspx页面,例如:called 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页面中的查询字符串动态加载我的aspx页面中的ascx文件。
我在page_load事件的aspx页面中有以下内容。
var control = (English)Page.LoadControl("/ascx/english.ascx");
我如何在choosemenu.aspx中渲染english.ascx页面的内容呢?
此外,我必须在ascx文件中传递一些值。这是静态的东西。
<Menu:MNU ID="english" runat="server" HiLiter="<%#h %>"></Menu:MNU>
答案 0 :(得分:3)
从服务器端加载控件
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
有一个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);
答案 1 :(得分:1)
为了使控件的回发值可用,您必须在不晚于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事件用于“创建或重新创建动态控件。”