2011-05-18 92 views
0

我在我的頁面中有驗證控件,我使用驗證摘要消息框來顯示驗證消息,下面顯示的javascript函數適用於我,但問題是我在OnClientClick上使用此javascript函數事件的按鈕,當我點擊與表單控件沒有被填充的按鈕,它顯示驗證摘要消息框如預期的,但當我關閉摘要框它會再次顯示,我需要關閉消息框消失,意味着我有每次做兩次點擊。有人能糾正我,我做錯了什麼。驗證摘要消息彈出兩次

下面是我在做什麼: -

<asp:Button ID="SubmitButtonOne" runat="server" Text="Submit" OnClick="SubmitButtonOne_Click" 
         ValidationGroup="Cases" ClientIDMode="Static" OnClientClick="PleaseWaitShow()" /> 

這裏是JavaScript函數:

function PleaseWaitShow() { 
       var isPageValid = true; 
       // Do nothing if client validation is not active 
       if (typeof (Page_Validators) != "undefined") { 
        if (typeof (Page_ClientValidate) == 'function') { 
         isPageValid = Page_ClientValidate();      
        } 
       } 
       if (isPageValid) {     

        document.getElementById('SubmitButtonOne').value = "Processing..."; 
       }    

       } 

後面的代碼:

protected void SubmitButtonOne_Click(object sender, EventArgs e) 
    {  
     try 
     {    
      // some functionality     

     } 

     catch (Exception) 
     { 
      //show errror message 
     } 

    } 

回答

2

這是預期的行爲。

一旦Page_ClientValidate由於您在PleaseWaitShow方法中的顯式調用而被觸發,第二個是由回發按鈕點擊產生的隱式調用。

所以你看到兩次ValidationSummary消息框。

我沒有解決方案來繞過這個問題,但如果有什麼事情會更新。

注:有一兩件事我想指出的是,因爲你有你的提交按鈕=的ValidationGroup「案例」你會傳遞到您的Page_ClientValidate方法。

更新1:我能想到的一個方法是嘗試這樣的事:

1:OnClientClick="return PleaseWaitShow();"

2:從PleaseWaitShow返回isPageValid():

function PleaseWaitShow() { 
      var isPageValid = true; 
      .... 
      .... 
      .... 
      return isPageValid; 
     } 
0

沒有,這不是預期的行爲。相反,這是ASP.NET驗證JS代碼中的一個錯誤。

ValidationSummaryOnSubmit函數遍歷所有摘要,併爲每個摘要循環遍歷所有驗證器。如果未指定組,則會附加每個驗證者的消息,從而導致相同消息的2(3,4,5?)個重複。

我通過固定功能(在第53行左右盯着)解決了這個問題:

.... 

for (i = 0; i < Page_Validators.length; i++) 
{ 
    var validator = Page_Validators[i]; 

    if (validator.validationGroup != null && summary.validationGroup != null) 
    { 
     if (validator.validationGroup != summary.validationGroup) continue; 
    } 

    if (!validator.isvalid && typeof (validator.errormessage) == "string") 
    { 
     s += pre + validator.errormessage + post; 
    } 
} 

.... 
0

如果使用Page_ClientValidate方法,你應該設置causevalidation爲false。 CausesValidation="false"

因爲Page_ClientValidate已經在這樣做了按鈕或控制您驗證