Domanda

Ho un problema con una procedura guidata di raccolta dati.

La mia procedura guidata ha un numero di validatori lato client (regex, campo obbligatorio ecc.) e funzionano tutti bene.

Ho appena aggiunto un CustomValidator a uno dei controlli, che sta chiamando un codice lato server. (purtroppo deve essere lato server).

Il mio problema è che questo codice sembra essere chiamato dopo che la procedura guidata è passata al passaggio successivo (o è in procinto di spostarsi).

Quindi, il fatto che ritorni falso per la convalida mi è di scarsa utilità ...

Sto aggiungendo il Validator in modo dinamico come parte del mio metodo InitControl come segue:

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";

Funziona con tutti gli altri validatori, ma non riesco a capire perché la procedura guidata si sta spostando prima che ritorni la convalida del mio server.

Ho aggiunto un pop-up javaScript, chiamato dal metodo lato server, che in pratica dice "non sono valido" & Amp; questo appare subito dopo lo schermo.

Qualsiasi suggerimento ricevuto con gratitudine.

È stato utile?

Soluzione

Sono riuscito a risolvere questo problema.

Ho aggiunto un gestore eventi per NextButtonClick & amp; PreviousButtonClick che richiama semplicemente nuovamente la convalida della pagina.

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;
        }
    }

Il mio validatore lato server viene ora chiamato due volte, una volta dal codice della procedura guidata originale, che viene quindi ignorato, e una seconda volta con questo metodo, che quindi impedisce alla procedura guidata di passare al passaggio successivo ....

Non è la soluzione migliore al mondo, ma almeno funziona! Aggiornerò questo post se dovessi mai capire cosa sta realmente succedendo.

Altri suggerimenti

Assicurati di aggiungere il controllo su ogni postback, nell'evento Init.

Modifica

Devi anche collegare manualmente la convalida lato client per i validatori personalizzati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top