【问题标题】:EnableViewState causing loss of valueEnableViewState 导致价值损失
【发布时间】:2017-12-31 18:35:06
【问题描述】:

使用 vb.net 4.5 和 Telerik 2017.2.711.45(第二季度) 我正在尝试获取 radgrid 过滤器表达式和一个公共字符串变量以在回发中持续存在。

对于EnableViewState=FALSE,radgrid 过滤器表达式不会在回发中持续存在,但是公共字符串变量 (stringVar)持续存在。

当我设置 EnableViewState=TRUE 时,radgrid 中的过滤器表达式 do 保持不变,但它会导致 stringVar 保持不变。

根据我对 ViewState 的理解,设置 EnableViewState=TRUE 会导致 stringVar 不会在回发中持续存在是没有意义的。我很想知道为什么会发生这种情况以及我可以做些什么来解决这个问题。

编辑: 突出显示的 Line 是由于 ReportTitle 不再具有值而引发错误的地方。

Partial Class displayxslgrid
    Public ReportTitle As String
    Public ReportsDB As reportDataBase
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Page.EnableViewState = True
        Reports = New reportDataBase.Global_Functions(System.Web.HttpContext.Current)

    End Sub

    Protected Sub RadGrid1_NeedDataSource(sender As Object, e As Telerik.Web.UI.GridNeedDataSourceEventArgs) Handles RadGrid1.NeedDataSource
        Call BindRadGrid1()

    End Sub

    Protected Sub RadGrid1_ItemCommand(ByVal source As Object, ByVal e As Telerik.Web.UI.GridCommandEventArgs) Handles RadGrid1.ItemCommand
        Dim strReportTitle As String

        Select Case e.CommandName
            Case RadGrid.ExportToExcelCommandName, RadGrid.ExportToWordCommandName, RadGrid.ExportToCsvCommandName

strReportTitle = ReportTitle.Trim

        End Select

    End Sub

    Public Sub BindRadGrid1()
        Dim strReportTitle As String
        Dim dt As DataTable = Nothing

        ReportTitle = dt.Rows(0).Item("ReportTitle")
        strReportTitle = dt.Rows(0).Item("ReportTitle").ToString
        'RadGrid1 Data source gets set here along with other stuff

    End Sub
End Class

【问题讨论】:

    标签: asp.net vb.net telerik viewstate


    【解决方案1】:

    使用视图状态是正常的,Telerik 控件需要它来在回发中保留它们的值。页面类上的公共字符串属性不应持续存在,并且应每次设置/计算。如果您绝对需要这样的东西来持久化,请将值保存在隐藏的服务器控件中,或者将其保存在 URL 的 QueryString 中。

    【讨论】:

    • 隐藏字段是一个聪明的解决方案,在这一点上我认为这是我将使用的,但是我仍然很好奇如果没有启用视图状态,字符串仍然存在。知道为什么启用视图状态会导致它不持久吗?它是否会触发任何可能导致其失去价值的额外事件?
    • 不坚持是合理的行为,我不确定它为什么/如何坚持下来。你能发布一些演示问题的代码吗?
    【解决方案2】:

    事实证明,那个变量并不是真正的持续存在。它从 bindradgrid1 中获得了它的价值。当EnableViewState=True 没有触发需要数据源事件时,不会调用bindradgrid1 并且变量没有得到值。简单的解决方法是在项目命令 sub 中添加一个 bindradgrid1(),这样即使使用EnableViewState=True,仍会调用 bindradgrid1()。感谢所有帮助过的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-03
      • 2021-07-13
      • 2017-12-17
      • 2019-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多