Pregunta

Tengo una colección de acordeones que contienen varios controles de texto y listas desplegables, cada uno con sus propios validadores.

Si se producen algunas validaciones del lado del servidor en el formulario, ¿hay algo que puede expandir automáticamente un panel minimizado anteriormente que contiene el mensaje del validador no válido?De lo contrario, parecerá al usuario que el formulario no es enviado sin razón.

Otro escenario: digamos que tengo múltiples paneles con el lado del cliente atado a las entradas.Si se minimiza un panel (y, por lo tanto, no puede ver el error del validador), ¿hay una manera de ampliar el panel apropiado cuando se produce la validación de la página AJAX en su envío?

Sé que hay una forma de fuerza bruta a este enfoque, donde realizo un seguimiento de todos los validadores y su acordeón asociado, pero esperaba una mejor solución que pueda manejar mi situación para una gran cantidad de insumos / validadores y paneles..

¿Fue útil?

Solución

¿Qué tal algo como esto (usando jQuery pero estoy seguro de que se puede convertir en javascript simple) ...

$(document).ready(function(){
    if (isPostback()){
        $.each(Page_Validators, function(index, validator) {
            if (!validator.isvalid) {
            // do something here to locate the accordion based on the validator
            // $(this) is the currently invalid validator element as a jquery object/wrapped set
            // so for example...
                $(this).parent().slideDown();
            // This assumes that the immediate parent of of the validator is the accordion which is unlikely but if you post your emitted html I can write the appropriate selector for you.  
            }
        });
    }
});

Porque no quiere que encienda la carga inicial, puede usar una técnica como esta ¿Cómo detectar / rastrear el correo postal en JavaScript? y verifique si está en una devolución de devolución después del documento. He asumido que ha utilizado los consejos en el enlace y su función para la detección de devolución de datos se llama ispostback().

Otros consejos

Hay un proyecto construido para este problema, intente echarle un vistazo a él ... También puede descargar la fuente para análisis más detalles o usar la misma base de código si desea ... http://www.codeproject.com/articles/43397/validating-Acordion-and-RadpanelBar-usando-AJAX-A

Rich Me venció a él, pero aquí está la versión de Vanilla JS (IE9 +):

Page_Validators
    .filter(function(v) { return !v.isvalid; })
    .forEach(function (v) { console.log(v.parentNode); });

Recuerde colocar el código debajo del -Tag.He tenido problemas con el uso de Documents de jquerys.ready y Window.Enload, ya que podría ejecutar el código antes de que se cargue todos los JavaScript necesarios de ASP.NET.

Actualización: una versión compatible con más navegador

for(var i = 0; i < Page_Validators.length; i++) {
    var validator = Page_Validators[i];
    if (!validator.isvalid) {
        console.log(validator.parentNode);
    }
}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top