2009-06-09 16 views
16

problema che ho è, il messaggio di riepilogo di convalida (avviso) viene visualizzato due volte. Non riesco a capire il motivo.Page_ClientValidate sta convalidando più volte.

Per favore aiuto. Ecco il codice

function validate() //javascript function 
{ 
    if (typeof(Page_ClientValidate) == 'function') 
    { 
     var isPageValid = Page_ClientValidate(); 
     if(isPageValid) 
     { 
     } 
    } 
} 

<asp:Button ID="btn1" runat="server" OnClientClick="validate()" Text="button" 
        ValidationGroup="ContactGroup" /> 

<asp:ValidationSummary ID="ValidationSummary1" runat="server" DisplayMode="List" 
        ShowMessageBox="true" ShowSummary="false" ValidationGroup="ContactGroup" /> 
+0

Sembra che ci siano altri due sommari di validazione. –

risposta

1

Rimuovere l'evento click del pulsante, che le forze di secondo convalida credo.

0

rimuovere l'evento OnClientClick di tasto non v'è alcuna necessità di che

2

Non c'è bisogno di chiamare manualmente la funzione Page_ClientValidate, a meno che non hai intenzione di fare la convalida al di fuori di un tentativo di postback.

Impostare i pulsanti CausesValidation su true. Questo eseguirà la convalida.

5

Ehi lì. Prima di tutto bisognerebbe perdere il ValidationGroup = "Gruppo Contatti" dal pulsante perché il gruppo di convalida in esso chiamerà prima la convalida sulla pagina quindi l'evento OnClientClick che contiene la funzione di convalida che chiamerà la pagina convalida ancora una volta.

allora si dovrebbe passare il gruppo di convalida "ContactGroup" per la funzione Page_ClientValidate() in modo che sappia che controlla per convalidare perché semplicemente chiamando Page_ClientValidate() convaliderà tutti i controlli indipendentemente dal loro gruppo di validazione (e può visualizzare il messaggio di convalida più di una volta, a seconda di quanti gruppi di convalida hai).

In breve fare qualcosa di simile:

function validate() //javascript function 
{ 
    if (typeof(Page_ClientValidate) == 'function') 
    { 
     var isPageValid = Page_ClientValidate('ContactGroup'); 
     if(isPageValid) 
     { 
      //your custom code 
     } 
    } 
}  

<asp:textbox id="txtMyBox" runat="server"/> 
<asp:requiredFieldValidator Id="rfv1" runat="server" ControlToValidate="txtMyBox" 
ValidationGroup="ContactGroup" ErrorMessage="Bad!"/> 

<asp:Button ID="btn1" runat="server" OnClientClick="validate()" Text="button"/> 

<asp:ValidationSummary ID="ValidationSummary1" runat="server" DisplayMode="List" 
        ShowMessageBox="true" ShowSummary="false" ValidationGroup="ContactGroup" /> 
3

appena return false dalla funzione e modificare l'OnClientClick come illustrato di seguito:

<asp:Button ID="btn1" runat="server" OnClientClick="return validate();" Text="button" 
         ValidationGroup="ContactGroup" /> 

     function validate() //javascript function 
     { 
      if (typeof(Page_ClientValidate) == 'function')  
      { 
       var isPageValid = Page_ClientValidate(); 
       if(isPageValid) 
       { 
       } 
      } 
     return false; 

} 
23

Il problema è che la funzione Page_ClientValidate accetta un parametro di input , se non si specifica l'input allora il validationsummary si innesca una volta per groupname.

Nel tuo caso, la funzione innesca due volte: una volta per groupname = "ContactGroup" e un'altra volta per GROUPNAME = ""

si dovrebbe cambiare

var isPageValid = Page_ClientValidate(); 

a

var isPageValid = Page_ClientValidate(''); 

se non si desidera specificare un ValidationGroup o se si desidera specificare un nome di gruppo, è necessario chiamare Page_ClientValidate in questo modo:

var isPageValid = Page_ClientValidate('ContactGroup'); 
1

È possibile effettuare la convalida, senza mostrare i messaggi, utilizzare il seguente segmento di codice, quindi utilizzare variabile isPageValid:

if (Page_ValidationSummaries && Page_ValidationSummaries[0] && Page_ValidationSummaries[0].showmessagebox) { 
      var showMessagesOption = Page_ValidationSummaries[0].showmessagebox; 
      Page_ValidationSummaries[0].showmessagebox = "False"; 
      isPageValid = Page_ClientValidate(); 
      Page_ValidationSummaries[0].showmessagebox = showMessagesOption; 
     } 
0

So che questo è un vecchio post, ma qui è una soluzione che può essere più flessibile. Analogamente ai suggerimenti degli altri utenti, questa soluzione accetta il gruppo di convalida che viene passato per impostazione predefinita dai controlli di convalida di asp.net. In questo modo non è necessario aggiungere OnClientClick="validate()" al controllo Button.

//Make sure the Page_ClientValidate function exists 
if (typeof (Page_ClientValidate) == "function") { 
    //Stash the old implementation in a temp variable 
    Page_ClientValidateOld = Page_ClientValidate; 

    //Create a new implementation and store it 
    //in Page_ClientValidate. Callers will now get 
    //this implementation. 
    Page_ClientValidate = function (validationGroup) { 
     var isValid; 

     //Call the old implementation first… 
     isValid = Page_ClientValidateOld(validationGroup); 

     //and then call our extension 
     if (!isValid) { 
      // Do something 
     } 

     return isValid; 
    } 
} 

Se volete saperne di più su questo approccio, vi consiglio di dare un'occhiata a questo post del blog: http://hyperthink.net/blog/interception-patterns-in-javascript/

Problemi correlati