Composite Control con validator che fanno riferimento a controlli esterni...

Neanche Lina Wertmuller faceva titoli lunghi come i miei... Comunque... In questi giorni sto realizzando dei web control utili per un progetto che sto seguendo dall'inizio del millennio a questa parte. Per snellire il lavoro mi sono creato dei composite control, ma nell'ultimo caso avevo riscontrato un problema. Banalmente: nel composite control avevo aggiunto un validator - nel dettaglio, un comparevalidator - che doveva far riferimento ad un webcontrol esterno al composite control. Con la normale assegnazione dell'ID del controllo da verificare ottenevo l'errore di controllo non trovato.

Con l'aiuto di Nostromo - che ringrazio - da questo post nel forum, si è scoperto che il problema è nel metodo CheckControlValidationProperty. Nel dettaglio cerca il controllo nel composite control corrente:

protected void CheckControlValidationProperty(string name, string propertyName)
{
Control control1 = this.NamingContainer.FindControl(name);
if (control1 == null)
{
throw new HttpException(HttpRuntime.FormatResourceString("Validator_control_not_found", name, propertyName, this.ID));
}
if (BaseValidator.GetValidationProperty(control1) == null)
{
throw new HttpException(HttpRuntime.FormatResourceString("Validator_bad_control_type", name, propertyName, this.ID));
}
}

Per risolvere ho dovuto estendere la classe CompareValidator modificando quel metodo per fare in modo che il controllo lo cercasse nella pagina. Il risultato è il seguente:

 public class myCompareValidatorControl:CompareValidator
 {
void CheckControlValidationProperty(string name, string propertyName)
{
Control control1 = Page.FindControl(name);
if (control1 == null)
{
throw new HttpException("Validator_control_not_found");
}
if (BaseValidator.GetValidationProperty(control1) == null)
{
throw new HttpException("Validator_bad_control_type");
}
}
protected override bool EvaluateIsValid()
{
string text1 = GetControlValidationValue(base.ControlToValidate);
if (text1.Trim().Length == 0)
{
return true;
}
string text2 = string.Empty;
if (this.ControlToCompare.Length > 0)
{
text2 = GetControlValidationValue(this.ControlToCompare);
}
else
{
text2 = this.ValueToCompare;
}
return BaseCompareValidator.Compare(text1, text2, this.Operator, base.Type);
}
string GetControlValidationValue(string name)
{
Control control1 = Page.FindControl(name);
if (control1 == null)
{
return null;
}
PropertyDescriptor descriptor1 = GetValidationProperty(control1);
if (descriptor1 == null)
{
return null;
}
object obj1 = descriptor1.GetValue(control1);
if (obj1 is ListItem)
{
return ((ListItem) obj1).Value;
}
if (obj1 != null)
{
return obj1.ToString();
}
return string.Empty;
}
protected override bool ControlPropertiesValid()
{
if (this.ControlToCompare.Length > 0)
{
CheckControlValidationProperty(this.ControlToCompare, "ControlToCompare");
if (string.Compare(base.ControlToValidate, this.ControlToCompare, true, CultureInfo.InvariantCulture) == 0)
{
throw new Exception("Validator_bad_compare_control");
}
}
else if ((this.Operator != ValidationCompareOperator.DataTypeCheck) && !BaseCompareValidator.CanConvert(this.ValueToCompare, base.Type))
{
throw new Exception("Validator_value_bad_type");
}
return true;
}
 }

Il problema è che il metodo di base CheckControlValidationProperty utilizza molte funzioni interne che ho dovuto riscrivere, tra cui GetControlValidationValue. Ma il risultato c'è, il tutto funziona. E vaiii!

Queste sì che cono soddisfazioni!

Nella stessa categoria

Commenti
Daniele Bochicchio scrive:
Re: Composite Control con validator che fanno riferimento a controlli esterni...

Andrea Zani wrote:
Neanche Lina Wertmuller faceva titoli lunghi come i miei... Comunque... In

ma se ne facevi uno script e me lo mandavi no eh?
05/05/2006 ore 20.35 | 1 risposta
andrewz scrive:
Re: Composite Control con validator che fanno riferimento a controlli esterni...

Daniele Bochicchio <Daniele_Bochicchio> ha scritto:
ma se ne facevi uno script e me lo mandavi no eh?

Hai ragione. Ma ho pensato che era un po' particolare come argomento...
07/05/2006 ore 13.24

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.

© 1998-2008 - AZ - Il blog di Andrea Zani

TagCloud
BLOG INFO
  • Post: 267
  • Commenti: 171
  • TrackBacks: 35
  • Feed blog e contenuti tecnici: RSS
  • Feed blog: RSS Atom OPML

MVP
CATEGORIE
I PIÙ LETTI DEL MESE
IN EVIDENZA