Pregunta

Tengo un problema con un asistente de recopilación de datos.

Mi asistente tiene varios validadores del lado del cliente (expresiones regulares, campo obligatorio, etc.) y todos funcionan bien.

Acabo de agregar un CustomValidator a uno de los controles, que está llamando a algún código del lado del servidor. (desafortunadamente tiene que ser del lado del servidor).

Mi problema es que parece que se llama a este código después de que el asistente haya pasado al siguiente paso (o esté en proceso de moverse).

Por lo tanto, el hecho de que devuelva falso para la validación es de poca utilidad para mí ...

Estoy agregando el Validator dinámicamente como parte de mi método InitControl de la siguiente manera:

mustUploadAnImageValidator = new CustomValidator();
mustUploadAnImageValidator.ControlToValidate = radioButtonList.ID;
mustUploadAnImageValidator.ValidationGroup = "wizardGroup";
mustUploadAnImageValidator.ErrorMessage = "You must select a valid gallery image to use";
mustUploadAnImageValidator.Display = ValidatorDisplay.Static;
mustUploadAnImageValidator.ServerValidate += 
    new ServerValidateEventHandler(mustUploadAnImageValidator_ServerValidate);
mustUploadAnImageValidator.CssClass = "galleryValidationMessageTop";

Esto funciona para todos los demás validadores, pero no puedo entender por qué el asistente se está moviendo antes de que regrese la validación de mi servidor.

Agregué una ventana emergente javaScript, llamada desde el método del lado del servidor, que básicamente dice "No soy válido". &erio; esto aparece justo después de que la pantalla se mueve.

Cualquier sugerencia recibida con gratitud.

¿Fue útil?

Solución

He logrado resolver esto.

He agregado un controlador de eventos para NextButtonClick & amp; PreviousButtonClick que simplemente llama a la validación de la página nuevamente.

protected virtual void DataCollectionWizard_PreviousButtonClick(object sender, WizardNavigationEventArgs e)
    {
        //manually validate the page, as the automatic validation seems to ignore CustomValidators
        Page.Validate("wizardGroup");

        if (!Page.IsValid)
        {
            e.Cancel = true;
        }
    }

Ahora se llama dos veces a mi validador del lado del servidor, una vez por el código del asistente original, que luego se ignora, y una segunda vez por este método, que luego detiene el asistente para pasar al siguiente paso ...

No es la mejor solución del mundo, ¡pero al menos está funcionando! Actualizaré esta publicación si alguna vez descubro lo que realmente está sucediendo.

Otros consejos

Asegúrese de agregar el control en cada devolución de datos, en el evento Init.

Editar

También debe conectar manualmente la validación del lado del cliente para validadores personalizados.

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