【发布时间】: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
结束子
【问题讨论】: