Controllo della procedura guidata in ASP.NET - Come impostare la proprietà NextButton Causevalidation su false
Domanda
Ho provato a impostarlo nel codice e anche nel markup ma quando si fa clic sul pulsante Avanti, la pagina viene convalidata, voglio impedire che ciò accada e controllare quando deve avvenire la convalida e quando no. Eventuali suggerimenti o esempi di codice sarebbero apprezzati
Soluzione
Il modo più semplice per farlo sarebbe rimuovere tutti i controlli di validazione dal WizardStep
in cui la validazione deve essere saltata.
Tuttavia, se hai bisogno di funzionalità avanzate, dovrai impostare manualmente la proprietà CauseValidation
dei pulsanti Successivo / Precedente in StepNavigationTemplate
. Il controllo Wizard ASP.NET non espone proprietà che consentono di accedere direttamente ai controlli in NavigationTemplates, né espone alcuna proprietà per accedere a NavigationTemplate. Quindi, dobbiamo fare affidamento sul metodo FindControl
per eseguire tutte le ricerche.
Un'informazione utile che ho trovato durante la ricerca di questo problema era che in fase di esecuzione il StepNavigationTemplate
è di un tipo ASP.NET interno chiamato StepNavigationTemplateContainer
e ha un ID " ; StepNavigationTemplateContainerID " ;. Ciò mi ha permesso di individuare StepNavigationTemplate
e, quindi, il pulsante Avanti.
Segue il codice:
protected void Wizard1_ActiveStepChanged(object sender, EventArgs e)
{
int step = Wizard1.ActiveStepIndex;
// Disable validation for Step 2. (index is zero-based)
if (step == 1)
{
ToggleValidation(false);
}
else // Enable validation for subsequent steps.
{
ToggleValidation(true);
}
}
private void ToggleValidation(bool flag)
{
WebControl stepNavTemplate = this.Wizard1.FindControl("StepNavigationTemplateContainerID") as WebControl;
if (stepNavTemplate != null)
{
Button b = stepNavTemplate.FindControl("StepNextButton") as Button;
if (b != null)
{
b.CausesValidation = flag;
}
}
}