使用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
答案 0 :(得分:2)
使用视图状态是正常的,Telerik控件需要它来保留它们在回发后的值。页面类上的公共字符串属性不应该保留,应该每次都设置/计算。如果你绝对需要这样的东西来保存,可以将值保存在隐藏的服务器控件中,或者将它放在URL的QueryString中。
答案 1 :(得分:0)
事实证明,该变量并非真正持久。它从bindradgrid1获得了它的价值。当EnableViewState=True
未触发need数据源事件时,不会调用bindradgrid1,并且变量不会获取值。简单的修复是在item命令sub中添加bindradgrid1(),这样即使使用EnableViewState=True
,仍然会调用bindradgrid1()。感谢所有帮助过的人。