2017-07-25 81 views
0

使用vb.net 4.5和Telerik 2017.2.711.45(Q2) 我想获得radgrid过滤器表达式和一个公共字符串变量来持续跨回发。EnableViewState造成价值损失

随着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

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

+0

隐藏字段是一个聪明的解决方案,并在这一点上我觉得这是我会用什么,不过我还是好奇,如果没有被启用视图状态,字符串仍然存在。任何想法为什么启用视图状态会导致它不会持续?它是否引发了任何可能导致它失去价值的事件? – FreakinRocket

+0

不坚持会是合理的行为,我不知道为什么/如何坚持我的头顶。你可以发布一些代码来证明问题吗? – Seano666

+0

编辑,代码后面添加。 – FreakinRocket

0

因此,事实证明,该变量并非真正的持续。它从bindradgrid1获得它的价值。当EnableViewState=True未激发需要数据源事件时,因此bindradgrid1未被调用,并且变量未获取值。简单的修复是在项目命令sub中添加bindradgrid1(),所以即使使用EnableViewState=True,bindradgrid1()仍然会被调用。感谢所有帮助过的人。