2010-03-22 19 views
6

He heredado algún código que divide una página en pestañas usando divs. En la primera página hay muchos validadores de campo y expresiones regulares requeridos. El problema es que un usuario puede cambiar a otra pestaña, activar una devolución de datos y fallar los validadores en la primera página, dejando las cosas en un lío.Cómo llamar a RequiredFieldValidator en el cliente antes de la devolución de datos

Lo que quiero poder hacer es realizar la validación en la primera página cuando un usuario selecciona otra pestaña, impidiendo que se muevan a una nueva pestaña hasta que la primera página sea válida.

<ul>       
    <li><a href="#tab1">Tab 1</a> </li> 
    <li><a href="#tab2" onclick="return isValid();">Tab 2</a></li> 
    <li><a href="#tab3" onclick="return isValid();">Tab 3</a></li> 
</ul> 

Donde isValid necesita desconectar los validadores.

Gracias!

ACTUALIZACIÓN: La respuesta proporcionada por codeka es bastante estrecha, sin embargo, porque necesito proporcionar atributos tanto href y onclick (para evitar estropear la pantalla), el interruptor (ancla) pestaña todavía está teniendo lugar incluso si la validación falla Así es como resolví esto. Descargo de responsabilidad: código feo por delante

<ul>       
    <li><a id="tab1Tab" href="#tab1" style="display:none"/><a onclick="isValid('tab1');">Tab 1</a></li> 
    <li><a id="tab2Tab" href="#tab2" style="display:none"/><a onclick="isValid('tab2');">Tab 2</a></li> 
    <li><a id="tab3Tab" href="#tab3" style="display:none"/><a onclick="isValid('tab3');">Tab 3</a></li> 
</ul> 

function isValid(tab) { 
    var valid = Page_ClientValidate(); 
    var tabId = (valid ? tab : "tab1") + "Tab"; 
    $("#" + tabId).click(); 
} 

Nota uso de jQuery para la compatibilidad entre navegadores con el evento click. Y esto solo funciona si no hay validadores en otras pestañas, según la respuesta de Thomas, tendré que usar grupos de validación y lógica adicional en isValid si se agregan.

Respuesta

2

ASP.NET crea una función de JavaScript mundial Page_ClientValidate que puede llamar para disparar los validadores:

function isValid() { 
    return Page_ClientValidate(); 
} 
+0

+1 Gracias, eso debería funcionar siempre que no haya otros validadores en las otras pestañas, será mejor que lo compruebe ahora :) – si618

+0

También puede pasar el grupo de validación que desea validar, por ejemplo: 'Page_ClientValidate ("Registro"); ' –

+0

Esto está bastante cerca, los validadores se activan con un clic, pero el ancla se sigue moviendo a otra pestaña incluso si se devuelve' falso '. – si618

2

Es posible que trate de usar un grupo de validación por pestaña. Al hacer clic de una pestaña a otra, que podría llamarse algo así como lo que en los nombres de las fichas representan los grupos de validación:

function TabValidate(tabName) { 
    if (Page_ClientValidate(tabName)) { 
     //do stuff 
    } 
} 

ADEMÁS he mencionado esto en un comentario, pero pensé que me gustaría añadir a mi post . Si no hay otros validadores en otras pestañas, entonces otra solución sería simplemente marcar los otros controles .NET en las otras pestañas que pueden desencadenar una devolución de datos con CausesValidation = "false" (por ejemplo, DropDownLists con AutoPostBack = "true")

+0

+1 Gracias, no hay validadores en las otras pestañas, pero es una buena información. – si618

+0

Si no hay otros validadores en otras pestañas, entonces otra solución es simplemente marcar los otros controles .NET en las otras pestañas que pueden desencadenar una devolución de datos con CausesValidation = "false" (por ejemplo, DropDownLists con AutoPostBack = "true") . – Thomas

Cuestiones relacionadas