EnableViewState导致价值损失

时间:2017-07-25 17:25:43

标签: asp.net vb.net telerik viewstate

使用vb.net 4.5和Telerik 2017.2.711.45(Q2) 我试图让radgrid过滤器表达式和公共字符串变量在回发中保持不变。

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

当我设置EnableViewState=TRUE radgrid 中的过滤器表达式时,它会导致stringVar 持续存在。

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

修改 突出显示的行是抛出错误的位置,因为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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

事实证明,该变量并非真正持久。它从bindradgrid1获得了它的价值。当EnableViewState=True未触发need数据源事件时,不会调用bindradgrid1,并且变量不会获取值。简单的修复是在item命令sub中添加bindradgrid1(),这样即使使用EnableViewState=True,仍然会调用bindradgrid1()。感谢所有帮助过的人。