2011-05-18 148 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已经在这样做了按钮或控制您验证