如何在 vb.net 中捕获HTML输入框文本更改事件

how to capture html input box text change event in vb.net

提问人:VimalSingh 提问时间:6/18/2023 更新时间:6/24/2023 访问量:167

问:

我需要在我的 HTML 输入框文本更改事件的 vb.net 中填充一个下拉列表。 这是我的输入框。

<input ID="txtPositionDt"  runat="server" class="style247" name="txtPositionDt" 
                                                     size="10" tabindex="0" type="text" autocomplete="off" />
HTML asp.net vb.net

评论

0赞 Joel Coehoorn 6/19/2023
为此,您需要一个通过 javascript 调用的 WebMethod。

答:

1赞 Albert D. Kallal 6/18/2023 #1

如果你希望这自动发生,而用户不必按下按钮或做任何事情,那么你可以向网页(JavaScript)添加一些代码,这可以/将/可以完成。

但是,您可以毫不费力地自动完成所有这些操作,而不是连接该自定义代码,而是 asp.net。

不要使用 HTML 输入或控件,而是使用 asp.net 内置控件之一。这些控件不仅可以轻松拖放到 Web 表单中,而且它们往往像桌面控件一样工作,并且所有“自动”代码都是自动为您完成的,无需任何努力。

而且,与桌面下拉框/组合框一样,基于 Web 的下拉框/组合框也提供了 2 个值(一个隐藏值和一个文本值)。

让我们用 asp.net 下拉列表来尝试一下。

将一个拖动到 Web 窗体上,使用属性表进行设置,或使用标记。(同样,只需在属性表中输入值,然后在事件选项卡上输入值,这真的很好)。

我们有这个标记:

所以到目前为止,这已经是 100% 拖放到这里了。

因此,我们最终得出了这个结论:

<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()
    ' 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

现在我们看到/得到这个:

enter image description here

正如你所看到的,这不仅很容易,而且你不需要在客户端浏览器中添加和编写一些JavaScript代码。所有活动部件都是自动完成的。

因此,除非您有充分的理由使用 html 控件,如上所示,否则请使用 asp.net 控件。

在上面,对于任何常规 SQL 查询,我创建了一个辅助例程,在我的常规代码中一遍又一遍地使用它。函数 MyRst simple 返回一个数据表。

因此,为了完整起见,例程 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

现在的结果是这样的:

enter image description here

因此,目前尚不清楚为什么需要文本框和下拉列表。

您可以使用下拉列表(组合框),或者如上所示,您可以使用常规 asp.net 文本框,并针对用户在该文本框中键入的内容设置更改事件。

因此,您可能只需要一个文本框,或者您可能想要一个下拉(组合)框。它不是 100% 清楚你在这里想要哪个。

最后但同样重要的?

这里的另一个可能目标是自动搜索,或在您键入时自动完成。当从数据库驱动时,这是一个“复杂”的任务和目标,但是当您从 ajaxtool-kit 键入控件时,会自动完成,如果这是您的目标,我建议使用控件。

换句话说,组合框(下拉列表)应该足以代替文本框,但如前所述,您可能在键入时正在寻找数据库驱动的“搜索/完成”,如果这是您的目标,那么我可以发布一个工作示例。