我有一个包含下拉列表的表单, 在索引更改的方法,我将调用我的用户控件类.cs与用户选择的参数,当我把我的代码在索引中更改像下面的代码,它不起作用,这是一个正常的行为:
protected void ResourceTypesDDL_SelectedIndexChanged(object sender, EventArgs e)
{
....
MyUsercontrol c = new MyUSercontrol(....);
this.panel.controls.add(c);
}
这就是为什么我必须把代码放在我的onload方法中,但问题是我怎么知道它是否是导致帖子返回的ddl?有财产吗?或者我应该使用 page.Request.Params.Get(“__ EVENTTARGET”)技术? 非常感谢!
答案 0 :(得分:2)
如果您的MyUserControl
真的是用户控制,这意味着.ascx
文件,您应该使用它:
Page.LoadControl("~/Controls/MyUserControl.ascx")
而不是通过直接调用构造函数来创建控件的实例。
protected void ResourceTypesDDL_SelectedIndexChanged(object sender, EventArgs e) {
....
var c = Page.LoadControl("~/Controls/MyUserControl.ascx");
this.panel.controls.add(c);
}
编辑:
但是,当然,在每回事后,你都会失去这种控制。因此,您还应确保在OnLoad
事件期间创建所有动态控件。
答案 1 :(得分:1)
在下拉列表中设置属性autoPostBack = true,以便页面回发
或使用以下函数在page_load
上获取回发控制private string GetPostBackControl()
{
string retVal = string.Empty;
try
{
string ctrlname = Page.Request.Params.Get("__EVENTTARGET");
if (ctrlname != null && ctrlname != string.Empty)
{
Control ctrl = this.Page.FindControl(ctrlname);
if (ctrl != null)
{
retVal = ctrl.ID;
}
}
}
catch (Exception ex) { ManageException(ex, ShowGeneralErrorMessage); }
return retVal;
}
答案 2 :(得分:0)
尝试设置下拉列表的AutoPostBack="True"
属性。在列表中选择项目后设置此属性后,它将自动执行回发,并且您的事件ResourceTypesDDL_SelectedIndexChanged
将被触发。