Validazione di componenti custom

di Cristian Civera, in UserScript, ASP.NET, C#,

Chi conosce ASP.NET avrà senz'altro apprezzato l'insieme di quei controlli, detti validator, in grado di verificare l'idoneità del contentuo dei campi.
Nell'articolo
https://www.aspitalia.com/articoli/aspplus/groupvalidators.aspx
abbiamo visto come potenziarli riunendoli in gruppi. Ora invece vedremo come rendere validabili controlli custom, user control o controlli già facenti parte del .NET Framework ma che non sono stati resi tali.
Uno che rientra sicuramente in questa famiglia CheckBox. E' frequente il caso in cui abbiamo un modulo di registrazione e dobbiamo obbligare l'utente ad accettare la legge sulla privacy per poter proseguire. Se specifichiamo nella proprietà ControlValidate di un RequiredFieldValidator l'id della CheckBox riceveremo un HttpExceptio. Dobbiamo distinguere quella che è la validazione lato server e quella client, dato che la prima va sempre implementata. Per farlo basta semplicemente marcare la classe con l'attributo ValidationProperty e indicare il nome della proprietà da controllare. Estendiamo quindi la classe in questo modo:

namespace ASPItalia.com.Scripts
{
  [ValidationProperty("Checked")]
  public class CheckBox : System.Web.UI.HtmlControls.HtmlInputCheckBox
  {

  }
}

L'HTML Control CheckBox dispone già una proprietà Checked e quindi indichiamo ai validatori che sarà quella la proprietà da controllare. Per usufruirne creiamo una semplice pagina che usa il nostro controllo compilato:

<form runat="server">
<aspi:CheckBox ID="cb" Runat="server" />Accetto le condizione sulla privacy
<asp:RequiredFieldValidator Runat="server" ErrorMessage="
Accettare le condizione sulla legge della privacy" InitialValue="False" ControlToValidate="cb"/>
<asp:Button runat="server" Text="Invia" />
</form>

I controlli e le proprietà da impostare sono le medesime che avremmo impostato per validare una TextBox, fatta eccezione per InitialValue che va ad indicare qual è il valore iniziale, in questo caso "False" (valore Booleano Checked trasformato in stringa).
Vediamo ora la parte client che viene effettuata tramite JavaScript sui browsers che supportano DHTML (IE 5 o superiore). Il motore di validazione non fa altro che cercare la CheckBox con l'ID indicato da ControlToValidate e verificare la proprietà "value". Non tutti gli elementi ce l'hanno e il tag input di tipo CheckBox lavora sulla proprietà Checked. Possiamo aggirare il problema impostando tramite JS il value alla pressione della CheckBox. Detto ciò, modifichiamo la classe aggiungendo gli attributi necessari in fase di prerender:

protected override void OnPreRender(EventArgs e)
{
  base.OnPreRender(e);
  this.Value = this.Checked.ToString();
  this.Attributes["onclick"] = String.Format("this.value = (this.checked)?'{0}':'{1}';",
    Boolean.TrueString,
    Boolean.FalseString);
}

Impostiamo subito l'attributo value e lo modifichiamo successivamente ad ogni pressione tramite JavaScript.
Anche se in questo esempio abbiamo utilizzato il controllo CheckBox, questa tecnica funziona con qualsiasi controllo che disponga di un tag e dell'attributo value.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi