当我离开页面时,为什么我的数据没有存储在我的 radcombobox 中?

问题描述 投票:0回答:1

在我的 asp.net 应用程序中,我有一个带有复选框的 radcombobox,但每当我选择一个项目并离开页面时,选择就会被清除。有没有我可能错过的房产?

我尝试更改 viewstatemode 属性但没有成功。

asp.net telerik radcombobox
1个回答
0
投票

是桌面窗口,还是基于网络?

填写表单(甚至网络表单)上的控件后,如果您离开该页面,则该页面将被销毁,不再存在于内存中,并且控件的所有值都会丢失。这对于任何开发平台都适用。

如果您希望“保留”所选值,则必须在离开该页面之前保存这些值。通常,这建议使用数据库来保存表单上的值,或者我想甚至将选择保存到某种持久存储中。然后,当您返回到相关网页/表单时,您的页面加载事件将必须重新加载并恢复所选的值。

上述内容非常适用于复选框、文本框或此类表单上的任何其他控件。默认情况下,它们根本不会为您“记住”任何事情。如果您“停留”在该页面上,则视图状态通常会自动为您保留这些值,但在离开此类页面后,如果您稍后返回并重新加载相关给定页面,则所有控制值都会丢失。

我没有 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

所以,现在的结果是这样的:

enter image description here

请注意,当我返回到上一页时,列表框中选择的值将被重新设置并重新加载。

目标页面上的代码是根据传递的值进行过滤的?嗯,它在会话外有双重用途,因为我想将所选列表传递到相关的下一页。

因此这段代码:

    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 编写的东西还是其他什么?

当您离开此类表单并加载另一个表单/网页时,给定页面上的控件不会突然“记住”它们的设置。

© www.soinside.com 2019 - 2024. All rights reserved.