动态创建DropDownList没有触发事件。是的,Autopostback设置为TRUE

时间:2011-02-25 17:44:34

标签: asp.net events

下面是我的动态下拉列表代码。它确实正确生成HTML。但是,该事件未被触发。而且,当我将事件名称更改为“onchange”时,它会给我一个编译错误,说它找不到脚本。通过它在我的代码隐藏中。

另外,我在OnInit页面事件中添加了这个。

pValueCmbBox.Attributes.Add("runat", "server");
pValueCmbBox.SelectedIndexChanged += new EventHandler(ddlParent_SelectedIndexChanged);
pValueCmbBox.Attributes.Add("OnSelectedIndexChanged", "ddlParent_SelectedIndexChanged");
pValueCmbBox.Attributes.Add("AutoPostBack", "True");
  1. 为什么没有OnSelectedIndexChanged被解雇?
  2. “onchange”仅用于调用javascript吗?
  3. 我应该将其作为ASCX来实现吗?

2 个答案:

答案 0 :(得分:0)

回答我自己的问题......

我最终制作了一个ASCX,现在它工作正常!

答案 1 :(得分:0)

1)它不起作用,因为你没有按照你应该的方式添加属性“AutoPostBack”。

pValueCmbBox.Attributes.Add("runat", "server"); //doesn't make sense...it's just for decoration...because you can't use in page behind code
pValueCmbBox.SelectedIndexChanged += new EventHandler(ddlParent_SelectedIndexChanged); //this line it's okay
pValueCmbBox.Attributes.Add("OnSelectedIndexChanged", "ddlParent_SelectedIndexChanged"); //this it's not necessary at all...because you already specified through pValueCmbBox.SelectedIndexChanged
pValueCmbBox.Attributes.Add("AutoPostBack", "True"); //this is the problem

正如您在here中看到的那样, SelectedIndexChanged “当列表控件中的选择在发布到服务器的帖子之间发生更改时发生。” 。所以你对AutoPostBack = true有个好主意;你应该写:

pValueCmbBox.AutoPostBack = true;

现在针对runat="server"问题,您可以将功能设置为以下功能:

protected void ddlParent_SelectedIndexChanged(object sender, EventArgs e)
{
 DropDownList c = (DropDownList)sender; //this is your pValueCmbBox that you set it in OnInit
 //more code here
}

2) onchange适用于javascript,但对于c#/ vb,您可以使用 OnTextChanged
3)你可以这样做,就像你已经尝试过的那样......或者我告诉你的方式。 :)