2009-03-11 12 views
8

En mi botón de envío, lo que quiero hacer es OnClick mostrar un panel "Espere" y ocultar el botón, A MENOS QUE los validadores digan que algo no es válido, entonces necesito que los botones sigan mostrando obviamente . De lo contrario, tengo un resumen de validación que muestra errores y no hay forma de volver a enviar.Comprobación de Javascript si la página es válida

La mayoría de los artículos que encuentro sobre hacer esto quieren usar la función Page_ClientValidate() para indicarle a la página que se valide a sí misma, pero esto no está definido para mí, al igual que la variable Page_IsValid. Esta es la función que estoy tratando de usar - lo que me estoy perdiendo ?:

function PleaseWaitShow() { 
    try { 
     alert("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(); 
       alert("Page_ClientValidate returned: " + isPageValid); 
       alert("Page_IsValid=" + Page_IsValid); 
      } else { 
       alert("Page_ClientValidate function undefined"); 
      } 
     } else { 
      alert("Page_Validators undefined"); 
     } 

     if(isPageValid) { 
      // Hide submit buttons 
      document.getElementById('pnlSubmitButton').style.visibility = 'hidden'; 
      document.getElementById('pnlSubmitButton').style.display = 'none'; 

      // Show please wait panel 
      document.getElementById('pnlPleaseWait').style.visibility = 'visible'; 
      document.getElementById('pnlPleaseWait').style.display = 'block'; 
     } else { 
      alert("page not valid - don't show please wait"); 
     } 
    } catch(er) { 
     alert("ERROR in PleaseWaitShow(): " + er); 
    } 
} 
+0

¿Esto se está utilizando con los Validadores de ASP.NET? –

+0

Estoy usando validadores de ASP.NET junto con algunos validadores de PeterBlum. Como nota al margen, aquí es donde obtuve la función que publiqué: http://www.experts-exchange.com/Programming/Languages/.NET/ASP.NET/Q_22426849.html – Chad

Respuesta

0

Creo que he encontrado una "clase de respuesta".

Todavía no puedo identificar por qué mi página no identificará "Page_ClientValidate()" o "Page_IsValid" - esta parte aún no ha sido respondida.

Sin embargo, estoy usando un número de validadores de PeterBlum en la página, y esos proporcionan un "VAM_ValOnSubmit()" que devuelve verdadero/falso. Entonces esta puede ser la solución. Tal vez tenga que estar seguro de que todos los validadores son PeterBlum para atraparlos a todos.

No es la mejor solución, pero mejor de lo que he llegado hasta ahora. Todavía estoy abierto a las respuestas en la parte "Page_IsValid".

0

Page_ClientValidate() no es ningún estándar función javascript que sé de

+0

Es un método proporcionado por ÁSPID.NET Validators, esto no fue especificado, pero creo que esto es a lo que se refiere el OP. –

+0

Correcto - aquí es donde obtuve las ideas (ver el fondo): http://www.experts-exchange.com/Programming/Languages/.NET/ASP.NET/Q_22426849.html – Chad

5

De acuerdo con la sección "La API del lado del cliente "en la página" ASP.NET Validation in depth ":

Page_IsValid | Variable booleana | Indica si la página es actualmente válida. Los scripts de validación lo mantienen actualizado en todo momento.

De hecho, observando esta variable en FireBug en un formulario con activar la validación del lado del cliente ASP.NET, no se actualiza mientras lleno en los detalles de la forma (forma incorrecta o correcta).

Obviamente, si ha deshabilitado el script del cliente en sus validadores o en el resumen de validación, entonces esta variable no estará disponible para usted.

+0

en mi botón clic agregué : alerta (typeof (Page_IsValid)); que vuelve "indefinido" – Chad

8

cambio de esta línea "if (typeof (Page_Validators) == "indefinido")" para si (typeof (Page_Validators) = "indefinido"!)

+2

Great catch. :) –

0

Hay un hilo del foro ASP.Net sobre este tema: Button that prevents multiple clicks

Aquí está la solución (en código detrás):

private void BuildClickOnceButton(WebControl ctl) 
{ 
    System.Text.StringBuilder sbValid = new System.Text.StringBuilder(); 
    sbValid.Append("if (typeof(Page_ClientValidate) == 'function') { "); 
    sbValid.Append("if (Page_ClientValidate() == false) { return false; }} "); 
    sbValid.Append(ctl.ClientID + ".value = 'Please wait...';"); 
    sbValid.Append(ctl.ClientID + ".disabled = true;"); 
    //GetPostBackEventReference obtains a reference to a client-side script function that causes the server to post back to the page. 
    sbValid.Append(ClientScript.GetPostBackEventReference(ctl, "")); 
    sbValid.Append(";"); 
    ctl.Attributes.Add("onclick", sbValid.ToString()); 
} 
4

Sólo echa

if(Page_IsValid) 
{ 
    //Yourcode 
} 

Esto funciona si tiene validadores en la página, que excluye el resumen de validación.

Cuestiones relacionadas