2011-07-29 82 views
2

我有一個包含以下內容頁...
防止滿回發從__doPostBack

  1. UpdatePanel1 - 包含錯誤顯示的div
    包含更新觸發了兩個按鈕
  2. UpdatePanel2 - 含過程1帶有asp:按鈕
  3. updatePanel3 - 包含帶有asp:按鈕的進程2
  4. 爲用戶提供Popup的JavaScript根據他們正在執行的過程確認Jquery消息框。

UpdatePanel的2或3基於從菜單選項中的用戶選擇變得可見。

selecting menu item 2 will display this page shown with an error message

當我點擊一個按鈕,在MessageBox持久性有機污染物和頁面使用__doPostBack從消息框響應處理正確的頁面做一個完整的回發。

我寧願頁面做部分回發和它的內容,並顯示錯誤顯示Divs,如果有錯誤。任何援助將不勝感激。

沒有什麼特別的按鈕

<asp:Button ID="ResetSomething" runat="server" Text="ResetSomething" Width="275px" /> 

這裏是內容頁腳本塊

<script type="text/javascript" language="javascript"> 
<!-- 
    function pageLoad() { 
     setform(); 

    }; 

    function setform() { 
     var reset1_button = $('input[id*=ResetSomething]'); 
     var reset2_button = $('input[id*=ResetSomethingElse]'); 

     reset1_button.click(function() { 
      var element = $(this); 
      $.prompt('Message1', { show: 'slideDown', buttons: { Ok: true, Cancel: false }, 
       submit: function(v, m, f) { submit_reset_callback(v, m, element); } 
      }); 
      return (false); 
     }); 

     var submit_reset_callback = function(result, messages, element) { 
      if (result) { __doPostBack("ResetSomething");} 
      return (false); 
     }; 

     reset2_button.click(function() { 
      var element = $(this); 
      $.prompt('Message2', { show: 'slideDown', buttons: { Ok: true, Cancel: false }, 
       submit: function(v, m, f) { submit_update_callback(v, m, element); } 
      }); 
      return (false); 
     }); 

     var submit_update_callback = function(result, messages, element) { 
      if (result) { __doPostBack("ResetSomethingElse"); } 
      return (false); 
     }; 
    };  
--> 
</script> 

這是後面的代碼爲的OnInit:

protected override void OnInit(EventArgs e) 
    { 
     base.OnInit(e); 
     this.PreLoad += (sender, args) => 
          { 

           this.ClientScript.GetPostBackEventReference(this, "arg"); 

           if (!IsPostBack) { return; } 

           string __targetaction = this.Request["__EVENTTARGET"]; 
           string __args = this.Request["__EVENTARGUMENT"]; 

           if (string.IsNullOrEmpty(__args)) return; 

           if (__targetaction == "ResetSomething") 
           { 
            ResetSomething(); 
           } 
           if (__targetaction == "ResetSomethingElse") 
           { 
            ResetSomethingElse(); 
           } 
           this.upnlNotifications.Update(); 
          }; 
    } 

回答

3

d請執行以下功能並用doPostBackAsync(controlId, null)替換您的__doPostBack呼叫。

function doPostBackAsync(eventName, eventArgs) { 
    var prm = Sys.WebForms.PageRequestManager.getInstance(); 

    if (!Array.contains(prm._asyncPostBackControlIDs, eventName)) { 
     prm._asyncPostBackControlIDs.push(eventName); 
    } 

    if (!Array.contains(prm._asyncPostBackControlClientIDs, eventName)) { 
     prm._asyncPostBackControlClientIDs.push(eventName); 
    } 

    __doPostBack(eventName, eventArgs); 
} 
+1

controlId應該是按鈕的ID是否正確?如果是這樣,我仍然可以得到相同的結果,整頁回發。 – Tim

+1

明白了。 __doPostBack(eventName.attr('id'),eventArgs);像魅力一樣工作。傳遞只是eventName拋出一個JavaScript錯誤。謝謝wonkim00 – Tim

0

controlId應該是生成異步回發的按鈕的ID,否則在頁面中會發生完整的回發。 對於您可以使用的ClientIDMode爲靜態e.g

<asp:Button ID="button1" runat="server" ClientIDMode="Static"/> 

    //then you can use below code 
    _doPostBack('button1', '');//clientidmode forces buttonid = id given by us 

檢查其是否正確?

如果是這樣,那麼你可以得到異步回發,而不是整頁回發。

這幫了我。 感謝@Tim的評論。