Search code examples
asp.netvb.netcrashupdatepanel

UpdatePanel Crashing Other Update Panels Not Working


I have very strange issues. I have used Update Panels before and never had issues but because I am grouping listviews I get the issues. I have about 4 Update Panels on a page which I call by using the panelname.update() in code behind, and used to all work.

Then because I had to group a bunch of listviews inside each other I had to use a PageLoad to DataBind rather than actually putting the data sources on the asp page. The data all works with Listview when page loads, but now the update panels don't work on async postback at all.

If I take out uppnlSOL.Update() in code behind all the rest start working again. The update panel that causes the issue is the same one that contains the listview with the DataBind.

ASP page has all panels have childrenastriggers="false" UpdateMode="Conditional" hence I call them all from code behind. I also tried removing the uppnlSOL.Update() from code behind and placing a trigger on the uppnlSOL on the asp page. As soon as it launches I get same result. I removed the trigger then the other 3 panels work again. I need all 4 working and I am confused, its almost like its rendering while its trying to do the update panel or something. I even tried a pause for 3 seconds after DataBind then trying updatepanel.Update() and all 4 still didn't work.

I will try to put some code below of what is sort of going on.

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

Solution

  • Here we go again I answer my own question because nobody would help, but I will help anyone else with similar situation because I'm nice.

    The reason it crashed all the other panels is because on my ASP.net page had some generated code in there using <% Response.Write("stuff here") %> and because of using the Response.Write caused it crash.

    The Update Panels are doing a async post back and me calling a Response.Write() at the same time as PanelName.Update() caused this issue. I am looking for another method to write to the screen without using response.write and that would solve my 2nd problem.

    Any Ideas would be appreciated.