启用视图状态导致价值损失



使用 vb.net 4.5 和 Telerik 2017.2.711.45 (Q2( 我正在尝试让 radgrid 过滤器表达式和一个公共字符串变量在回发中持久化。

对于EnableViewState=FALSE,radgrid过滤器表达式不会通过回发持久化,但是公共字符串变量(stringVar(持久化。

当我设置EnableViewState=TRUEradgrid中的过滤器表达式确实会持续存在,但是它会导致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

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

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

最新更新