2014-01-22 110 views
2

我正在處理包含多個更新面板的頁面。 我通常設置updatemode='conditional',但如果我更新其中一個更新面板中的數據,我必須更新所有其他更新面板,否則在螢火蟲的控制檯窗口中出現錯誤並且頁面掛起,我該怎麼辦才能解決此問題?
多個更新面板的問題


有關此問題的詳細信息,上面的圖片代表了兩個更新面板一個簡單的頁面。
updatepanel1中的第一個gridview與updatemode='conditional'
頁面的其餘部分在updatepanel2updatemode='conditional'
該場景如下:用戶從第一個gridview中選擇一天,然後在jquery中使用
__doPostBack('btnRefresh', '');獲取數據以填充第二個gridview。
注意:第二個更新面板中存在帶有id="btnRefresh"的按鈕。
請幫幫我。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Appointments.aspx.cs" Inherits="Appointments" %> 

     <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">`enter code here` 
     <html xmlns="http://www.w3.org/1999/xhtml"> 
     <head runat="server"> 
      <title></title> 
      <script src="js/jquery-1.10.2.min.js" type="text/javascript"></script> 
      <script src="js/FQuery.js" type="text/javascript"></script> 
      <link href="style/style-en.css" rel="stylesheet" type="text/css" /> 
      <link href="style/ModalStyle-mini.css" rel="stylesheet" type="text/css" /> 
      <script type="text/javascript"> 
       var cells; 
       var isAdd = 1; 
       $(document).ready(function() { 
        DoWork(); 
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(requestHandler); 

       }); 
       function requestHandler(sender, args) { 
        DoWork(); 
       } 
       function DoWork() { 

        $("#gvDays .row").click(function() { 
         $("#gvDays .row").removeClass("darkblue"); 
         $(this).addClass("darkblue"); 
         $("#txtPeriod").val(""); 
         $("#txtDay_det_id").val(""); 
         cells = $(this).find("td"); 
         $("#txtDay_id").val($(cells[0]).text()); 
         __doPostBack('btnRefresh', ''); 
        }); 

        $("#gvDayDet .row").click(function() { 
         $("#gvDayDet .row").removeClass("darkblue"); 
         $(this).addClass("darkblue"); 
         cells = $(this).find("td"); 
         $("#txtDay_det_id").val($(cells[0]).text()); 
         $("#txtTimeFrom").val($(cells[2]).text()); 
         $("#txtTimeTo").val($(cells[3]).text()); 
         $("#txtPeriod").val($(cells[4]).text()); 
         __doPostBack('btnDaysDet', ''); 
        }); 
       }; 
      </script> 
     </head> 
     <body> 
      <form id="form1" runat="server"> 
      <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true"> 
      </asp:ScriptManager> 

      <div id="catNewsTab"> 
       <asp:UpdatePanel runat="server" UpdateMode="Conditional"> 
        <ContentTemplate> 
       <asp:GridView ID="gvDays" runat="server" AutoGenerateColumns="false"> 
        <Columns> 
         <asp:BoundField DataField="day_id" HeaderText="Day No." /> 
         <asp:BoundField DataField="day_name" HeaderText="Day Name" /> 
        </Columns> 
        <HeaderStyle CssClass="gray" /> 
        <RowStyle CssClass="blue1 row" /> 
        <SelectedRowStyle CssClass="darkblue row" /> 
       </asp:GridView> 
        </ContentTemplate> 
       </asp:UpdatePanel> 
      </div> 
      <asp:UpdatePanel ID="upDaysDet" runat="server" UpdateMode="Conditional"> 
       <ContentTemplate> 
        <div> 
         <asp:Button ID="btnSaveDayDet" Text="Save" runat="server" OnClick="btnSaveDayDet_Click" /> 
         <asp:Button ID="btnUpdateDayDet" Text="Update" runat="server" OnClick="btnUpdateDayDet_Click" /> 
         <asp:Button ID="btnDeleteDayDet" Text="Delete" runat="server" OnClick="btnDeleteDayDet_Click" /> 
         <asp:TextBox ID="txtDay_id" runat="server" CssClass="hide" /> 
         <asp:Button ID="btnRefresh" runat="server" CssClass="hide" OnClick="btnRefresh_Click" /> 
    <asp:Button ID="btnDaysDet" runat="server" CssClass="hide" OnClick="btnDaysDet_Click" /> 
        </div> 
        <div style="height: 326px;" class="scroll scrollsmall"> 
         <asp:GridView ID="gvDayDet" runat="server" AutoGenerateColumns="false" EmptyDataText="No Results Found"> 
          <Columns> 
           <asp:BoundField DataField="day_det_id" HeaderText="day_det_id" /> 
           <asp:BoundField DataField="day_id" HeaderText="day_id" /> 
           <asp:BoundField DataField="time_from" HeaderText="time_from" /> 
           <asp:BoundField DataField="time_to" HeaderText="time_to" /> 
          </Columns> 
          <HeaderStyle CssClass="gray" /> 
          <RowStyle CssClass="blue1 row" /> 
          <SelectedRowStyle CssClass="darkblue row" /> 
          <EmptyDataRowStyle CssClass="empty" /> 
         </asp:GridView> 
        </div> 
       </ContentTemplate> 
      </asp:UpdatePanel> 
      </form> 
     </body> 
</html> 
+0

您可以向我們展示您的aspx代碼,特別是更新面板區域。 – 2014-01-22 00:40:00

回答

0

是否有一個原因,爲什麼您使用jQuery的回傳,而不是在後面的代碼「click」事件?如果「刷新」按鈕位於第二個UpdatePanel中,並且它的唯一目的是更新同一UpdatePanel中的GridView,則不需要指定AsyncPostBackTrigger。

希望這會有所幫助。如果沒有,示例代碼將有助於提供有關該問題的更多信息。

+0

之所以我沒有其他辦法做到這一點 –

+0

的代碼是加了:) –

+0

有沒有其他辦法做回發或者什麼? –

0

我可能誤解了這個問題,但您可以從後面的代碼中調用UpdatePanel1.Update()。在後面的代碼(.vb文件)的OnClick事件中,你應該能夠明確地調用每個更新面板上的更新:

UpdatePanel1.Update() 
UpdatePanel2.Update() 

...

這是否回答你的問題?

+0

不,我不這麼認爲 我不需要這樣做,因爲當用戶選擇一行時,我給這個選定的行一個樣式(顏色)來標識該行是選定的 如果我調用UpdatePanel1.Update()它會消失,除了我認爲它在頁面上造成沉重的負載,特別是當頁面包含超過更新面板其巨大的數據 –