18 messaggi dal 28 aprile 2006
Ho un problema nella validazione di un controllo utilizzando il CustomValidator.

In particolare ho questi due controlli:
- una drowpdownlist con la lista delle provincie caricata al load della pagina da una tabella sql;
- una textbox con il cap.

Per validare il cap utilizzo una procedura che ricerca nel dataset tutti i comuni della provincia con i rispettivi cap e lo confronta con le prime due cifre del cap inserito.
Se trova almeno una riga significa che quel cap appartiene per lo meno alla provincia inserita.

Ho tentato di fare questo tipo di validazione con il CustomValidator che ammette purtroppo solamente un controllo per la validazione.

Ho letto diversi modi che permettono di validare con il customValidator due controlli client-side ma nel mio caso ho la necessità di validarli server-side accedendo anche al valore corrente della dropdownlist.

Come posso fare?

grazie per l'aiuto
3.121 messaggi dal 29 ottobre 2001
Contributi | Blog
brenzan77 <brenzan77> ha scritto:
Ho tentato di fare questo tipo di validazione con il CustomValidator che ammette purtroppo solamente un controllo per la validazione.

E' ininfluente. Dal codice che hai creato server side, puoi richiamare il valore dell'altro webcontrol così come faresti dopo un postback.
Il problema può nascere - parlo per esperienza personale - quando ci sono più coppie di controlli da controllare (che gioco di parole, bleah!). In questo caso io ho risolto chiamando i controlli interessati nello stesso modo. Per esempio:

1° dropdownlist: provincia_nascita
1° textbox: cap_nascita
2° dropdownlist: provincia_residenza
2° textbox: cap_residenza

Nel codice server side del custom validator, per riprendere la giusta coppia di valori, facevo:

protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
string valore_text=args.Value.ToString();
string id_drop = ((CustomValidator)source).ControlToValidate; id_drop = "provincia" + id_drop.Substring(id_drop.IndexOf("_")); DropDownList dd = (DropDownList)Page.FindControl(id_drop); string textbox = args.Value;
string dropdown = dd.SelectedValue;
if (...)
args.IsValid = true;
}

Nell'esempio qui sopra in "textbox" ho il valore della textbox con il campo, e in "dropdown" la provincia selezionata nel dropdownlist. Quindi puoi fare i controlli del caso...

Ciao
18 messaggi dal 28 aprile 2006
Ciao Andrea,

ti ringrazio per la risposta!

Riprendo quanto mi hai scritto ...


E' ininfluente. Dal codice che hai creato server side, puoi richiamare il valore dell'altro webcontrol così come faresti dopo un postback.


Io avevo già provato ad accedere al controllo direttamente come hai fatto tu nel tuo esempio ma ho sempre avuto come valore il primo della lista: cioè il valore selezionato quando riempio il controllo con il dataTable. Non riesco ad ottenere il valore del controllo al momento della validazione. Forse perchè non c'è ancora stato il postBack? Io pensavo di si.

Ti faccio vedere la sub server-side (scusami ma sono poco esperto di C# anche se lo capisco abbastanza):

---------------------------------------------------

Dim ComuniDT As New lpds.ComuniDataTable
Dim ComuniTA As New lpdsTableAdapters.ComuniTA

Dim Validatore As CustomValidator = CType(source, CustomValidator)

Dim BoxText As DropDownList = CType(Validatore.FindControl("ddlProvincie"), DropDownList)

Dim Prov As String = CType-(Me.CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("panIndirizzo").FindControl("ddlProvincie"), DropDownList).SelectedValue

ComuniTA.FillByCap_CodProv(ComuniDT, Prov, args.Value)

If ComuniDT.Rows.Count > 0 Then
args.IsValid = True
Else
args.IsValid = False
End If
---------------------------------------------------


Dichiarazione del codice nella pagina aspx:

Per la textbox txtCap:
<asp:CustomValidator
ValidationGroup="CreateUserWizard1"
ID="CustomValidatorCap"
ControlToValidate="txtCap"
ClientValidationFunction="ValidatoreLatoClient"
runat="server"
OnServerValidate="CapValido"
ErrorMessage="Il Cap inserito non risulta della provincia selezionata."
display="None"
SetFocusOnError="true" />

<asp:TextBox MaxLength="5" ID="txtCap" runat="server"></asp:TextBox>


Per la dropDownList:

<asp:DropDownList ID="ddlProvincie" runat="server">
</asp:DropDownList>

-----------------------------------------------------

Il valore di Prov è sempre "AG" cioè il valore corrispondente alla prima riga del dataSource associato al controllo (valore: "Agrigento"), anche se in realtà viene selezionato un altra provincia.

Se tu hai il valore corretto nella dropDownList evidentemente io sbaglio qualcosa che non riesco a capire.

Se hai qualche idea ti ringrazio ...

Ciao,

Marco
18 messaggi dal 28 aprile 2006
Il problema è stato risolto...

L'errore stava nel fatto che al Load veniva riempito nuovamente il dataTable delle provincie e quindi si perdeva la scelta fatta dall'utente.

Mettendo un bel "if not page.isPostBack" riesco ad accedere al valore impostato nella pagina.

Non pensavo che all'attivazione dei controlli di validazione prima venisse comunque chiamato il load.

Errori di inesperienza.

Grazie cmq!

Marco

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.