[英]Dynamic Control creation, event handling and control properties in asp.net
我正在尝试解决以下问题:
我有一个用户控件,需要将其动态加载到另一个控件中。 这个动态加载的控件引发一个事件,据我所知,只有在onload事件期间创建并加载该控件后,才能正确处理由动态加载的控件引发的事件。 动态加载控件时,我还必须考虑另一个约束,这是父控件中的一个属性。 此属性将确定是否应加载控件。
伪代码:
ControlA
Property ShowControl
ControlA has a CheckBox(chkShowControlIfSelected)
OnLoadEvent()
If chkShowControlIfSelected.checked checked and ShowControlProperty is set
{
reate ControlB Dynamically
ControlB.Event += EventHandler()
Add ControlB to ControlCollection
}
我遇到的问题是,如果我包含在prerender事件中加载controlB的代码,则属性ShowControl设置正确,但未调用EventHandler()。 如果将代码动态加载到pageLoad事件中的controlB中,则尚未设置属性ShowControl,但在这种情况下,将正确调用eventHandler代码。
我是否缺少某些内容或在错误的事件处理程序中处理了代码?
以下是工作示例:
ControlA:
public partial class ControlA : System.Web.UI.UserControl
{
public bool ShowControl
{
get
{
if (this.ViewState["ShowControl"] == null)
return false;
else
return (bool)this.ViewState["ShowControl"];
}
set
{
this.ViewState["ShowControl"] = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (this.ShowControl)
{
var controlB = (ControlB)this.LoadControl("ControlB.ascx");
controlB.FileUploadingComplete += controlB_FileUploadingComplete;
this.pnl1.Controls.Add(controlB);
}
}
void controlB_FileUploadingComplete(object sender, EventArgs e)
{
//throw new NotImplementedException();
Trace.Write("file upload completed");
}
}
ControlB:
public partial class ControlB : System.Web.UI.UserControl
{
public event EventHandler FileUploadingComplete;
protected void OnFileUploadingComplete()
{
if (this.FileUploadingComplete != null)
this.FileUploadingComplete(this, EventArgs.Empty);
}
protected void btn1_Click(object sender, EventArgs e)
{
this.OnFileUploadingComplete();
}
}
页面(存在ControlA
):
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
this.ControlA1.ShowControl = true;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.