我有很奇怪的问题。我以前使用过更新面板,从未遇到过问题,但由于我正在分组listviews
我遇到了问题。我在一个页面上有大约 4 个更新面板,我使用代码隐藏中的panelname.update()
调用它们,并用于所有工作。
然后,由于我必须在彼此内部对一堆listviews
进行分组,因此我不得不使用PageLoad
来DataBind
,而不是实际将数据源放在asp
页面上。当页面加载时,数据都适用于Listview
,但现在更新面板根本不适用于async postback
。
如果我在代码后面取出uppnlSOL.Update()
,其余的都重新开始工作。导致问题的更新面板与包含DataBind
listview
的更新面板相同。
ASP
页面的所有面板都有childrenastriggers="false" UpdateMode="Conditional"
因此我从代码隐藏中调用它们。我还尝试从代码隐藏中删除uppnlSOL.Update()
,并在asp
页面上的uppnlSOL
上放置触发器。一旦它启动,我就会得到相同的结果。我卸下了触发器,然后其他 3 个面板再次工作。我需要所有 4 个工作和 我很困惑,它几乎就像它的渲染一样,而它试图做更新面板或其他东西。我什至在DataBind
后尝试暂停 3 秒,然后尝试updatepanel.Update()
,所有 4 个仍然不起作用。
我将尝试在下面放置一些正在发生的事情的代码。
Protected Sub Packing_Load(sender As Object, e As EventArgs) Handles Me.Load
If IsPostBack = False Then
lvSOLGrpDelAdd.DataSource = tblDespatchA.DespatchPackSOLGrpDelAdd_Get(IDSO:=hdnIDSO.Value)
lvSOLGrpDelAdd.DataBind()
End If
End Sub
Protected Sub lvSOLGrpDelAdd_RowDataBound(sender As Object, e As ListViewItemEventArgs) Handles lvSOLGrpDelAdd.ItemDataBound
Dim lvSOLGrpDelMeth As ListView = DirectCast(e.Item.FindControl("lvSOLGrpDelMeth"), ListView)
lvSOLGrpDelMeth.DataSource = tblDespatchA.DespatchPackSOLGrpDelMeth_Get(IDSO:=hdnIDSO.Value, IDGrpDelAdd:=DataBinder.Eval(e.Item.DataItem, "IDGrpDelAdd"))
lvSOLGrpDelMeth.DataBind()
End Sub
Protected Sub lvSOLGrpDelMeth_RowDataBound(sender As Object, e As ListViewItemEventArgs)
Dim lvSOL As ListView = DirectCast(e.Item.FindControl("lvSOL"), ListView)
lvSOL.DataSource = tblDespatchA.DespatchPackSOL_Get(IDSO:=hdnIDSO.Value, IDGrpDelAdd:=DataBinder.Eval(e.Item.DataItem, "IDGrpDelAdd").ToString, IDGrpDelMeth:=DataBinder.Eval(e.Item.DataItem, "IDGrpDelMeth").ToString)
lvSOL.DataBind()
End Sub
Protected Sub btnAllocateLine_Click(sender As Object, e As EventArgs)
Dim lvRow As Object = DirectCast(sender, Object).Parent
Dim hdnIDSOL As HiddenField = DirectCast(lvRow.FindControl("hdnIDSOL"), HiddenField)
Dim lstQtyAvail As DropDownList = DirectCast(lvRow.FindControl("lstQtyAvail"), DropDownList)
tblDespatchA.DespatchPackSOLAllocate_Save(IDSO:=hdnIDSO.Value, IDSOL:=hdnIDSOL.Value, AllocateQty:=lstQtyAvail.SelectedValue)
Bind()
End Sub
Protected Sub Bind()
uppnlDOL.DataBind()
uppnlDOL.Update()
uppnlDBox.DataBind()
uppnlDBox.Update()
uppnlFooter.DataBind()
uppnlFooter.Update()
'I HAVE TO REGET FROM DATABASE CHANGES THAT HAVE HAPPEN AND
'I KNOW THIS BIT WORKS BECAUSE I HAVE TESTED THE DATA.
lvSOLGrpDelAdd.DataSource = tblDespatchA.DespatchPackSOLGrpDelAdd_Get(IDSO:=hdnIDSO.Value)
lvSOLGrpDelAdd.DataBind()
uppnlSOL.Update() ' THIS BIT WHEN I PUT IN THIS MAKES ALL THE OTHER PANELS CRASH
End Sub
我们再来一次 我回答我自己的问题,因为没有人会帮忙,但我会帮助其他有类似情况的人,因为我很好。
它崩溃所有其他面板的原因是在我的 ASP.net 页面上有一些生成的代码使用 <% Response.Write("stuff here") %> 并且由于使用 Response.Write 导致它崩溃。
更新面板正在执行异步回发,我在 PanelName.Update() 的同时调用 Response.Write() 导致了此问题。我正在寻找另一种不使用 response.write 写入屏幕的方法,这将解决我的第二个问题。
任何想法将不胜感激。