2012-01-11 47 views
1

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

我知道我可以在文本框中添加一个“onchange”处理程序,并使用Javascript来实现某些功能,但那不是我真正想做的。有没有办法只是像︰

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

在网页控制代码,它连接到TextChanged事件的文本框?

回答

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语法,但它笑有可能。

+0

虽然我使用的是asp:TextBox,所以我没有处理标记;我有一个控制,我正在渲染到RenderControl的页面。像“txt1.OnTextChanged ...”似乎无法访问。你能否提供一个例子,以便我能看到你的意思更好?我可以阅读C#,所以应该没问题。 – Dave 2012-01-11 16:18:11

+0

你可以在代码上做txtControl.AutoPostBack = true – H27studio 2012-01-12 10:00:56

+0

@Dave对不起,响应速度慢,离线一段时间。已添加示例。 – Rozwel 2012-01-17 18:56:52