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 = <u>this.NamingContainer.FindControl(name);</u> 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!
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- C# e Net 6 in Kubernetes con Prometheus e Grafana, il 12 gennaio 2022 alle 21:58
- Snaturare Kubernetes evitando i custom container Docker, il 6 gennaio 2022 alle 19:40
- Provando Kaniko in Kubernetes come alternativa a Docker per la creazione di immagini, il 18 dicembre 2021 alle 20:11
- Divertissement con l'OpenID e Access Token, il 6 dicembre 2021 alle 20:05
- Operator per Kubernetes in C# e Net Core 6., il 28 novembre 2021 alle 19:44
- RBAC in Kubernetes verso gli operator, il 21 novembre 2021 alle 20:52