2010-10-12 84 views
4

在我的頁面上的ASP.NET AJAX UpdatePanel中,我有一個提交按鈕,它具有一些自定義的JavaScript驗證應用,它設置了一個全局的_cancelGeneralSettingsUpdate標誌關於驗證的結果。ASP.NET AJAX UpdatePanel - 在InitializeRequest中取消回發不會重新啓用

除非您輸入無效值,更正它並重新提交,否則一切正常。在這種情況下,變量_cancelGeneralSettingsUpdate正確設置爲false,但在頁面嘗試通過AJAX回發之前不調用initializeRequest函數,導致回發失敗。

一旦無效輸入得到糾正並且用戶再次單擊提交按鈕,我需要能夠回發成功。不幸的是,一旦回發被取消,我似乎沒有正確連接到PageRequestManager流水線。如果我刷新頁面,所有內容都會再次運行,但通過args.set_cancel(true); 取消回發會將我置於無法通過AJAX進行其他回發的狀態,直到頁面刷新。

如何重新啓用回發或導致initializeRequest在後續回發之前觸發並設置它?

我附上了一些我的代碼。假設_cancelGeneralSettingsUpdate在任何嘗試回發之前設置正確,因爲我已經驗證了這一點。

var _cancelGeneralSettingsUpdate = false; 

function initializeRequest(sender, args) { 
     var pageRequestManager = Sys.WebForms.PageRequestManager.getInstance(); 
     if (!pageRequestManager.get_isInAsyncPostBack() & args.get_postBackElement().id == '<%= UpdateWorkgroupGeneralButton.ClientID %>') 
     { 
      if (_cancelGeneralSettingsUpdate) { 
       args.set_cancel(true); 
       // Show error message 
      } 
      else { 
       args.set_cancel(false); 
      } 
     } 
     else { 
      args.set_cancel(false); 
     } 
    } 
+0

與此問題非常相似。 http://ajaxcontroltoolkit.codeplex.com/workitem/25755 – 2010-10-13 17:44:58

回答

2

思想我找到了解決辦法。在我的情況做正確的事情是,當我的JavaScript驗證失敗

Sys.WebForms.PageRequestManager.getInstance().abortPostBack(); 

在我的例子上述調用這個函數,我是在一個自定義initializeRequest處理程序調用args.set_cancel(false);。雖然這在第一例中起作用,但是在用戶更正其無效輸入並嘗試重新提交表單之後,它不允許將來的回發成功。

這實際上只會中止當前正在運行的回傳。在我的情況下,__doPostBack(...)還沒有被調用,所以Sys.WebForms.PageRequestManager.getInstance().abortPostBack();默默無法做我所期待的。

最終結果是使用雙按鈕系統。沒有修正AJAX庫,這是唯一合理的選擇。