【发布时间】:2021-11-12 12:31:27
【问题描述】:
如何使用 vb.net 在 asp.net 中根据另一个下拉列表值更改下拉列表值而不自动回发
【问题讨论】:
如何使用 vb.net 在 asp.net 中根据另一个下拉列表值更改下拉列表值而不自动回发
【问题讨论】:
好吧,如果你不回发,那么没有代码可以运行。
您可以开始使用 ajax 调用。这允许您在没有页面回发的情况下调用 + 使用服务器端代码。但这意味着您必须在客户端编写一些 JavaScript 代码。
但是,这里的回发并不是世界末日。
还有一个介于两者之间的选择,您只发回两个组合框,这导致几乎只发布两个组合框,页面的其余部分将保持不变。
这意味着 asp.net 为您准备了 ajax 连接!!!
所以,我们有这两个组合框。第一个选择城市,第二个是该城市的酒店。
<div style="float:left">
<h3>Select City</h3>
<asp:DropDownList ID="cboCity" runat="server" Width="168px"
DataValueField="City" DataTextField="City" AutoPostBack="true"></asp:DropDownList>
</div>
<div style="float:left;margin-left:25px">
<h3>Select Hotel</h3>
<asp:DropDownList ID="cboHotels" runat="server" Width="168px"
DataValueField="ID" DataTextField = "HotelName"
></asp:DropDownList>
</div>
好的,请注意我们的第一个组合框具有自动回发功能。
我们的代码是这样的:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
' load up City combo
cboCity.DataSource = MyrstP(New SqlCommand("SELECT City from City ORDER BY City"))
cboCity.DataBind()
cboCity.Items.Insert(0, "") ' Add blank row selecting
End If
End Sub
第一个组合框代码是这样的:
Protected Sub cboCity_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboCity.SelectedIndexChanged
' cascade City and limit hotels from given city.
Using cmdSQL As New SqlCommand("SELECT ID, HotelName FROM tblHotels
WHERE City = @City ORDER BY HotelName")
cmdSQL.Parameters.Add("@City", SqlDbType.NVarChar).Value = cboCity.SelectedItem.Text
cboHotels.DataSource = MyrstP(cmdSQL)
cboHotels.DataBind()
cboHotels.Items.Insert(0, New ListItem("Select Hotel", 0))
End Using
还有让生活更轻松的辅助例程:
Public Function MyrstP(sqlCmd As SqlCommand) As DataTable
Dim rstData As New DataTable
Using sqlCmd
sqlCmd.Connection = New SqlConnection(My.Settings.TEST4)
sqlCmd.Connection.Open()
rstData.Load(sqlCmd.ExecuteReader)
End Using
Return rstData
End Function
(注意非常小心,我们从来没有创建连接对象然后在以后使用它,但是我们在 sql 命令中使用 BUILT IN one。
好的,
现在让我们将其更改为不整页回发。
这样做:
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<div style="float:left">
<h3>Select City</h3>
<asp:DropDownList ID="cboCity" runat="server" Width="168px"
DataValueField="City" DataTextField="City" AutoPostBack="true"></asp:DropDownList>
</div>
<div style="float:left;margin-left:25px">
<h3>Select Hotel</h3>
<asp:DropDownList ID="cboHotels" runat="server" Width="168px"
DataValueField="ID" DataTextField = "HotelName"
></asp:DropDownList>
</div>
</ContentTemplate>
</asp:UpdatePanel>
现在试一试!!! - 注意页面如何不再回发。
这仍然是部分页面回发,但只有组合框被发送回服务器,并且只有部分被更新。事实上,这就是带有 signalR 的新西装外套页面的工作原理。
所以试试上面的。您会注意到没有页面回发发生。
【讨论】: