是的,这又是臭名昭着的观点!
现在我知道如果你以错误的顺序加载控件或者在回发等之后视图状态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
答案 0 :(得分:1)
尝试将您的逻辑移至OnPreRender
和/或在OnLoad事件中,使用当前参数构建页面,以便可以正确重建DropDownList,然后使用新参数重新绘制页面并查看问题是否消失。
可能发生的事情是DropDownList有viewstate,但在重新处理ViewState之前控件的内容已经改变。