UpdatePanel 崩溃其他更新面板不工作

UpdatePanel Crashing Other Update Panels Not Working

我有很奇怪的问题。我以前使用过更新面板,从来没有遇到过问题,但是因为我正在分组 listviews,所以我遇到了问题。我在一个页面上有大约 4 个更新面板,我通过使用代码隐藏中的 panelname.update() 调用它们,并且用于所有工作。

然后因为我必须将一堆 listviews 分组在一起,所以我不得不使用 PageLoadDataBind 而不是实际将数据源放在 asp 页。页面加载时,所有数据都适用于 Listview,但现在更新面板根本不适用于 async postback

如果我在后面的代码中删除 uppnlSOL.Update(),剩下的就重新开始工作。导致该问题的更新面板与包含 listviewDataBind 的更新面板相同。

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 导致它崩溃。

更新面板正在执行异步 post 返回,我在 PanelName.Update() 的同时调用 Response.Write() 导致了这个问题。我正在寻找另一种不使用 response.write 写入屏幕的方法,这将解决我的第二个问题。

如有任何想法,我们将不胜感激。