2009-06-09 22 views
16

problema que tengo es que, el mensaje de resumen de validación (alerta) se muestra dos veces. No puedo entender la razón.Page_ClientValidate valida varias veces.

Por favor ayuda. Este es el código

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

Parece que hay más de dos resúmenes de validación. –

Respuesta

1

Retire el evento clic del botón, que las fuerzas segunda validación creo.

0

eliminar el evento OnClientClick de botón que no hay necesidad de que

2

No hay necesidad de llamar a la función manualmente Page_ClientValidate, a menos que estés con ganas de hacer la validación externa de un intento de devolución de datos.

Establezca los botones CausesValidation en true. Eso ejecutará la validación.

5

Hey there.First de todo lo que debe perder ValidationGroup = "ContactGroup" desde el botón porque tener grupo de validación en él primero llamará a la validación en la página entonces el evento OnClientClick que contiene la función de validación que llamará a la página validación una vez más.

Luego debe pasar el grupo de validación "ContactGroup" a la función Page_ClientValidate() para que sepa qué controles validar porque simplemente llamando a Page_ClientValidate() validará todos los controles independientemente de su grupo de validación (y puede mostrar el mensaje de validación más de una vez, según la cantidad de grupos de validación que tenga).

En pocas palabras hacer algo como esto:

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

acaba de regresar falsa de la función y cambiar el OnClientClick como se muestra a continuación:

<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

El problema es que el Page_ClientValidate función toma un parámetro de entrada , si no especifica la entrada, la validación se dispara una vez por nombre de grupo.

En su caso, la función se dispara dos veces: una vez para nombregrupo = "CONTACTGROUP" y otro tiempo para el nombre de grupo = ""

debe cambiar

var isPageValid = Page_ClientValidate(); 

a

var isPageValid = Page_ClientValidate(''); 

si no desea especificar un ValidationGroup, o si desea especificar un nombre de grupo, entonces necesita llamar a Page_ClientValidate como sigue:

var isPageValid = Page_ClientValidate('ContactGroup'); 
1

Puede realizar la validación y sin muestran mensajes, utilice el siguiente segmento de código, a continuación, utilizar la variable 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

Sé que esto es una entrada antigua, pero aquí es una solución que puede ser más flexible. De forma similar a otras sugerencias de los usuarios, esta solución acepta el grupo de validación que pasa de forma predeterminada por los controles de validación de asp.net. De esta forma, no necesitaría agregar el OnClientClick="validate()" en el control 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; 
    } 
} 

Si desea leer más sobre este enfoque, recomiendo que nos fijamos en esta entrada del blog: http://hyperthink.net/blog/interception-patterns-in-javascript/

Cuestiones relacionadas