从复合Web控件内的控件回发

时间:2012-01-11 15:42:26

标签: asp.net vb.net custom-controls postback composite-controls

假设我们有一个带有组合框和文本框的复合网页控件。是否可以构建控制功能,以便当文本框中的文本发生更改时,它会回发并将值作为选项添加到组合框中?

我知道我可以在文本框中添加一个“onchange”处理程序并使用Javascript工作,但这并不是我想要做的事情。有没有办法像:

Protected Sub txt1_TextChanged(sender As Object, e As System.EventArgs) Handles txt1.TextChanged
    combo1.items.add(txt1.Text)
End Sub

在Web控件代码中,它是否连接到文本框的TextChanged事件?

1 个答案:

答案 0 :(得分:1)

简而言之,你应该能够做到这一点。

我不知道VB需要什么语法,但我在C#中多次做过类似的事情。对于C#,您可以将偶数处理程序的名称添加到文本框的标记中,并将文本框上的自动回发设置为true。然后,事件处理程序背后的代码执行您需要它的工作。

作为一项规则,我还在Web控件上定义了一个自定义事件,并让文本框的事件处理程序也引发了这个custome事件。这样就可以选择让使用控件的页面对事件起作用。

修改

以下是DropDownList的示例,它是在一组Active Directory域中查找用户的控件的一部分。如果用户更改了他们选择的域名,我们希望它在新域名中搜索先前输入的值。

标记式:

<asp:DropDownList ID="ddl_Domain" runat="server" onselectedindexchanged="ddl_Domain_SelectedIndexChanged" AutoPostBack="True"></asp:DropDownList>

代码背后:

protected void ddl_Domain_SelectedIndexChanged(object sender, EventArgs e)
{
    if (UserID != "" || LastName != "" || FirstName != "" || EmailAddress != "")
    {
        lnk_Find_Click(sender, e);
    }
}

或者在我通过代码动态添加子控件的情况下,我使用了这种语法:

DropDownList ddl = new DropDownList();
ddl.ID = "ddl";
ddl.DataTextField = "Text";
ddl.DataValueField = "Value";
ddl.SelectedIndexChanged += This_SelectedValue_Changed;
ddl.AutoPostBack = true; 

正如我所说,我不知道如何使用VB的Handles语法来完成这项工作,但它应该是可行的。