在我的 asp.net 应用程序中,我有一个带有复选框的 radcombobox,但每当我选择一个项目并离开页面时,选择就会被清除。有没有我可能错过的房产?
我尝试更改 viewstatemode 属性但没有成功。
是桌面窗口,还是基于网络?
填写表单(甚至网络表单)上的控件后,如果您离开该页面,则该页面将被销毁,不再存在于内存中,并且控件的所有值都会丢失。这对于任何开发平台都适用。
如果您希望“保留”所选值,则必须在离开该页面之前保存这些值。通常,这建议使用数据库来保存表单上的值,或者我想甚至将选择保存到某种持久存储中。然后,当您返回到相关网页/表单时,您的页面加载事件将必须重新加载并恢复所选的值。
上述内容非常适用于复选框、文本框或此类表单上的任何其他控件。默认情况下,它们根本不会为您“记住”任何事情。如果您“停留”在该页面上,则视图状态通常会自动为您保留这些值,但在离开此类页面后,如果您稍后返回并重新加载相关给定页面,则所有控制值都会丢失。
我没有 rad 组合框,但说一个简单的 ListView 来选择多个引用,如下所示:
标记:
<h3>Select Cites to display Hotels</h3>
<asp:ListBox ID="lstCity" runat="server"
DataTextField="City" Height="262px"
SelectionMode="Multiple" Width="200px">
</asp:ListBox>
<br />
<br />
<asp:Button ID="cmdViewHotels" runat="server" Text="View Hotels"
OnClick="cmdViewHotels_Click"
CssClass="btn"/>
上面加载的代码是这样的:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
Loadcombo()
End If
End Sub
Sub Loadcombo()
Dim strSQL As String =
"SELECT City FROM City ORDER BY City"
lstCity.DataSource = MyRst(strSQL)
lstCity.DataBind()
' now set any selected city based on "saved" session() list
If Not Session("CityChoice") Is Nothing Then
Dim CityList As List(Of String) = Session("CityChoice")
For Each OneCity As ListItem In lstCity.Items
If CityList.Contains(OneCity.Text) Then
OneCity.Selected = True
End If
Next
End If
End Sub
Protected Sub cmdViewHotels_Click(sender As Object, e As EventArgs)
' first save selected Cities into session()
Dim CityList As New List(Of String)
For Each OneCity As ListItem In lstCity.Items
If OneCity.Selected Then
CityList.Add(OneCity.Text)
End If
Next
Session("CityChoice") = CityList
Response.Redirect("CboTime.aspx")
End Sub
所以,现在的结果是这样的:
请注意,当我返回到上一页时,列表框中选择的值将被重新设置并重新加载。
目标页面上的代码是根据传递的值进行过滤的?嗯,它在会话外有双重用途,因为我想将所选列表传递到相关的下一页。
因此这段代码:
If Not IsPostBack Then
LoadTable
End If
End Sub
Sub LoadTable()
Dim strSQL =
"SELECT HotelName,City, Description FROM tblHotelsA "
Dim strWhere As String = ""
Dim cmdSQL As New SqlCommand()
Dim CityList As List(Of String) = Session("CityChoice")
For i = 0 To CityList.Count - 1
If strWhere <> "" Then strWhere &= $","
strWhere &= $"@P{i}"
cmdSQL.Parameters.Add($"@P{i}", SqlDbType.NVarChar).Value = CityList(i)
Next
If strWhere <> "" Then
strWhere = $" WHERE City IN ({strWhere})"
End If
cmdSQL.CommandText = strSQL & strWhere & " ORDER BY HotelName"
Dim dtHotels As DataTable = MyRstP(cmdSQL)
GHotels.DataSource = dtHotels
GHotels.DataBind()
End Sub
返回上一页选择更多城市是这样的:
Protected Sub cmdBack_Click(sender As Object, e As EventArgs)
Response.Redirect("SelectCity.aspx")
End Sub
因此,请注意在导航到下一个网页之前,我如何处理所选项目并保存到 session()。请注意,当页面加载时,我如何检查 session() 并恢复/重新选择列表中的项目。
那么,这是一个网页、Windows 桌面程序、为 Android 编写的东西还是其他什么?
当您离开此类表单并加载另一个表单/网页时,给定页面上的控件不会突然“记住”它们的设置。