英文:
how to capture html input box text change event in vb.net
问题
我需要在HTML输入框文本更改事件中在vb.net中填充下拉列表。以下是我的输入框。
<input ID="txtPositionDt" runat="server" class="style247" name="txtPositionDt" size="10" tabindex="0" type="text" autocomplete="off" />
英文:
i need to populate a dropdown in vb.net on my html inputbox text change event.
Here is my input box.
<input ID="txtPositionDt" runat="server" class="style247" name="txtPositionDt"
size="10" tabindex="0" type="text" autocomplete="off" />
答案1
得分: 1
如果您希望在用户无需按下按钮或执行任何操作的情况下自动发生这种情况,那么您可以在网页上添加一些代码(JavaScript),这可以实现。
然而,不需要编写自定义代码的情况下,您可以让asp.net自动完成所有这些操作,而无需额外努力。
不要使用HTML输入或控件,而是使用asp.net内置的控件。这些控件不仅可以轻松拖放到Web表单中,而且它们的工作方式类似于桌面控件,所有的“自动”代码都会自动完成,无需额外努力。
与桌面下拉/组合框类似,基于Web的下拉框也具有两个值的功能(隐藏值和文本值)。
让我们尝试使用asp.net下拉框。
将一个拖放到Web表单上,使用属性窗格进行设置,或者使用标记。 (再次强调,您只需在属性窗格中输入值,然后在事件选项卡中进行操作)。
我们有以下标记:
所以到目前为止,这完全是拖放操作。
所以,我们最终得到了这个:
<asp:DropDownList ID="DropDownList1" runat="server"
AutoPostBack="true"
OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"
DataValueField="ID"
DataTextField="HotelName"
>
</asp:DropDownList>
<br />
<br />
<asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine"
Height="100px"
width="260px"
>
</asp:TextBox>
好的,现在是后端代码:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
LoadData
End If
End Sub
Sub LoadData()
' 所有页面设置和数据加载都在这里完成
DropDownList1.DataSource = MyRst("SELECT ID, HotelName FROM tblHotelsA
ORDER BY HotelName")
DropDownList1.DataBind()
DropDownList1.Items.Insert(0, "Select A Hotel")
End Sub
Protected Sub DropDownList1_SelectedIndexChanged(sender As Object, e As EventArgs)
Dim sBuf As String =
$"Drop down Text = {DropDownList1.SelectedItem.Text} {vbCrLf}" &
$"Drop down (Hotel ID) value = {DropDownList1.SelectedItem.Value}"
TextBox1.Text = sBuf
End Sub
现在我们看到的结果是这样的:
正如您所看到的,这不仅容易,而且您不需要在客户端浏览器中添加和编写一些JavaScript代码。所有移动部分都已自动完成。
因此,除非您有一个真正好的理由要使用HTML控件,如上所示,请使用asp.net控件进行此操作。
在上述示例中,针对任何通用的SQL查询,我创建了一个我在通用代码中反复使用的辅助程序。MyRst函数简单地返回一个数据表。
因此,为了完整起见,MyRst例程(在简单的代码模块中 - 因此对所有代码都是全局的)如下所示:
Public Function MyRst(strSQL As String) As DataTable
Dim rstData As New DataTable
Using conn As New SqlConnection(My.Settings.TEST4)
Using cmdSQL As New SqlCommand(strSQL, conn)
conn.Open()
rstData.Load(cmdSQL.ExecuteReader)
rstData.TableName = strSQL
End Using
End Using
Return rstData
End Function
编辑:仅捕获文本框更改的代码。
让我们使用文本框进行相同的操作。
因此,我们像这样插入一个asp.net文本框:
<asp:TextBox ID="txtPositionDt" runat="server"
AutoPostBack="true"
OnTextChanged="txtPositionDt_TextChanged"
autocomplete="off"
>
</asp:TextBox>
<br />
<asp:Label ID="Label1" runat="server" Text="">
</asp:Label>
后端代码如下:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
Protected Sub txtPositionDt_TextChanged(sender As Object, e As EventArgs)
Label1.Text = "Value of text box = " & txtPositionDt.Text
End Sub
现在的结果是这样的:
因此,不太清楚为什么您要同时使用文本框和下拉框。
您可以使用下拉列表(组合框),或者如上所示,您可以使用常规的asp.net文本框,并为用户在该文本框中输入的内容设置更改事件。
因此,您可能只需要一个文本框,或者您可能需要一个下拉(组合)框。不太清楚您希望使用哪种。
最后但并非最不重要的是?
这里的另一个可能目标是实现自动搜索或自动完成。当从数据库驱动时,这是一个“复杂”的任务和目标,但是ajaxtool-kit提供了一个可以在用户输入时自动完成的控件,我建议如果这是您的目标,那么使用该控件。
换句话说,一个组合框(下拉列表)应该足够替代文本框,但正如前面所提到的,您可能正在寻找一个由数据库驱动的“搜索/完成”功能,如果这是您的目标,我可以发布一个工作示例。
英文:
If you want this to occur automatically without the user having to press a button or do anything, then you could add some code to the web page (JavaScript), and this could/would/can be done.
However, in place of wiring up that custom code, you can get asp.net to do this all automatic for you, and without efforts.
Don't use an HTML input or control, but use one of the asp.net built-in controls. Those controls are not only a easy drag + drop into the webform, but they tend to work like desktop controls, and all of the "automatic" code behind is done automatic for you, and without efforts.
And, like a desktop dropdown/combo box, the web based ones also have provisions for 2 values (a hidden value, and a text value).
Let's try this with a asp.net dropdown.
Drag one on to the web form, setup using the property sheet, or use markup. (Again, it's really nice that you can just enter values in the property sheet, and then on the event tab).
We have this markup:
So really so far, this has been 100% drag and drop here.
So, we wind up with this:
<asp:DropDownList ID="DropDownList1" runat="server"
AutoPostBack="true"
OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"
DataValueField="ID"
DataTextField="HotelName"
>
</asp:DropDownList>
<br />
<br />
<asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine"
Height="100px"
width="260px"
>
</asp:TextBox>
Ok, so now code behind:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
LoadData
End If
End Sub
Sub LoadData()
' all page setup and loading of data goes here
DropDownList1.DataSource = MyRst("SELECT ID, HotelName FROM tblHotelsA
ORDER BY HotelName")
DropDownList1.DataBind()
DropDownList1.Items.Insert(0, "Select A Hotel")
End Sub
Protected Sub DropDownList1_SelectedIndexChanged(sender As Object, e As EventArgs)
Dim sBuf As String =
$"Drop down Text = {DropDownList1.SelectedItem.Text} {vbCrLf}" &
$"Drop down (Hotel ID) value = {DropDownList1.SelectedItem.Value}"
TextBox1.Text = sBuf
End Sub
And now we see/get this:
As you can see, this is not only easy, but then you not forced to add and write some JavaScript code in the client side browser. All of the moving parts are done automatic for you.
So, unless you have a really great reason to use a html control, as the above shows, use a asp.net control for this.
In above, for any general SQL query, then I created a helper routine that I use over and over in my general code. The function MyRst simple returns a data table.
So, for completeness, the routine MyRst (in a simple code module - thus global to all code) is this:
Public Function MyRst(strSQL As String) As DataTable
Dim rstData As New DataTable
Using conn As New SqlConnection(My.Settings.TEST4)
Using cmdSQL As New SqlCommand(strSQL, conn)
conn.Open()
rstData.Load(cmdSQL.ExecuteReader)
rstData.TableName = strSQL
End Using
End Using
Return rstData
End Function
Edit: Just code to capture text box change.
Let's do the same with a text box.
So, we drop in a asp.net text box like this:
<asp:TextBox ID="txtPositionDt" runat="server"
AutoPostBack="true"
OnTextChanged="txtPositionDt_TextChanged"
autocomplete="off"
>
</asp:TextBox>
<br />
<asp:Label ID="Label1" runat="server" Text="">
</asp:Label>
The code behind is this:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
Protected Sub txtPositionDt_TextChanged(sender As Object, e As EventArgs)
Label1.Text = "Value of text box = " & txtPositionDt.Text
End Sub
And the result is now this:
So, it is not really clear why you want a text box and also a drop down.
You either use a dropdownlist (a combo box), or as above shows you can have a regular asp.net textbox, and have a change event for what the user types into that text box.
So, you might be wanting a text box only, or maybe you want a dropdown (combo) box. It not 100% clear as to which you want here.
Last but not least?
Another possible goal here is to have a auto-search, or auto-complete as you type. When driven from a database, this is a "complex" task and goal, but there is a auto-complete as you type control from the ajaxtool-kit, and I do suggest that control be used if that is your goal.
In other words, a combo box (dropdownlist) should suffice in place of a text box, but as noted, it is possible you are looking for a database driven "search/complete" as you type, and if that is your goal, then I can post a working example.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论