无法加载viewstate

时间:2010-04-29 10:33:15

标签: asp.net viewstate

是的,这又是臭名昭着的观点!

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

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

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

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

任何帮助表示感谢。

感谢,

KS

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

回发上的selectedvalue似乎每次都为零(因为控件不是以某种方式在viewstate中?!)。

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

嗨,谢谢你的回应。我应该尝试转向OnPreRender的逻辑是什么?

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

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

以下是一些代码:


UserControl来源:

导入iMWeb_BUL Imports 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

End Sub

1 个答案:

答案 0 :(得分:1)

尝试将您的逻辑移至OnPreRender

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

可能发生的事情是DropDownList有viewstate,但在重新处理ViewState之前控件的内容已经改变。