【问题标题】:Failed to load viewstate无法加载视图状态
【发布时间】:2010-04-29 10:33:14
【问题描述】:

是的,这又是臭名昭著的视图状态!

现在我知道,如果您以错误的顺序加载控件,或者在回发等之后视图状态 ID 不正确,则可能会出现问题。

但我的问题是我并没有真正动态地创建任何控件 - 我在页面上只有一个用户控件。

更重要的是,问题似乎只发生在一位用户身上。

可能是什么问题?浏览器缓存损坏?

任何帮助表示赞赏。

谢谢,

KS

嗨,好的,所以我把范围缩小了一点。当我从下拉列表控件(这是一个用户控件)中选择一个项目 - 然后尝试使用所选值重新绑定我的网格时,会发生错误。

回发时的 selectedvalue 似乎每次都为零(因为控件不知何故不在视图状态中?!)。

UserControl(包含下拉列表)是在设计时添加的。

您好,感谢您的回复。我应该尝试将什么逻辑转移到 OnPreRender?

我错过的另一件事......

-网格的第一个绑定工作正常(在第一次页面加载时)。 - 从下拉列表中选择值会导致回发,其中网格再次使用值绑定 - 也可以正常工作。 - 当我单击另一个按钮(这也触发网格绑定)时,会发生视图状态错误。

下面是一些代码:


用户控件来源:

导入 iMWeb_BUL 导入 System.Data

部分类 TitleList 继承 System.Web.UI.UserControl

Public Event IndexHasChanged(ByVal sender As Object, ByVal e As CommandEventArgs)

Public Property TitleID() As Integer
    Get
        Return IIf(DDL_Titles.SelectedValue = Nothing, 0, DDL_Titles.SelectedValue)
    End Get
    Set(ByVal value As Integer)
        Try
            DDL_Titles.SelectedValue = value
        Catch
        End Try
    End Set
End Property

Public ReadOnly Property TitleTable() As DropDownList
    Get
        Return DDL_Titles
    End Get
End Property

Public ReadOnly Property TitleName() As String
    Get
        If DDL_Titles.SelectedValue > 0 Then
            Return DDL_Titles.SelectedItem.ToString()
        Else
            Return Nothing
        End If
    End Get
End Property

Public Sub DDL_Titles_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DDL_Titles.SelectedIndexChanged
    Dim ee As CommandEventArgs = New CommandEventArgs(DDL_Titles.SelectedValue, Nothing)
    RaiseEvent IndexHasChanged(Me, ee)
End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then
        'bind dropdownlist
        common.BindDDLs("MovieListDemo", "[SP_ListTitlesDEMO]", "MOV_ID", "movie_name", true, DDL_Titles, Nothing)
    End If
End Sub

结束类

主页逻辑(伪):

Sub Page_Load
 If not postback
  bindGrid()
 End If

If UserControl1.IndexChanged
 bindGrid()
End If

If Button1.clicked
 bindGrid() <---- error occurs here
End if

Sub bingGrid
 fetch data passing param TitleList1.TitleID (usercontrol)
End Sub

结束子

【问题讨论】:

    标签: asp.net viewstate


    【解决方案1】:

    尝试将您的逻辑移入 OnPreRender

    和/或在 OnLoad 事件中,使用当前参数构建页面,以便 DropDownList 可以正确重建,然后使用新参数重新绘制页面,看看问题是否消失。

    可能发生的情况是 DropDownList 具有视图状态,但控件的内容在重新处理视图状态之前发生了变化。

    【讨论】:

    • 好的,所以我将 TitleList1 的选定值存储在 viewstate 对象中,并使用它来获取数据以绑定网格。似乎工作正常。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多