Her vil jeg forklare hvordan å kode en gjenbrukbar, universell, CheckBoxValidator kontroll
Jeg liker å kalle det "universelle" fordi den er i stand til å validere. :
Full kildekode er festet nederst i denne artikkelen.
La oss gi en titt på noen del av koden.
Først av alt har CheckBoxValidator å arve fra BaseValidator og implementere minst den viktigste metoden en validator behov: EvaluateIsValid.The CheckBoxValidator eksponerer også MinimumChecked og MaximumChecked egenskaper for å la oss definere på design-time hvor mange boksene får lov til å bli valgt
.
public class CheckBoxValidator: BaseValidator {private Kontroll _controlToValidate; Privat liste _checkBoxes; private int _minimumChecked = 1; private int _maximumChecked = int.
MaxValue; public int MinimumChecked {få {return _minimumChecked; } Satt {_minimumChecked = verdi; }} Public int MaximumChecked {får {return _maximumChecked! = Int.MaxValue? _maximumChecked: 0; } Sett {_maximumChecked = verdi! = 0? verdi: int.MaxValue; }} Beskyttet ride bool EvaluateIsValid () {int teller = getCheckedCount (); returnere tall> = _minimumChecked && count}}
Som du kan se, blir evalueringsfunksjonen en telling av utvalgte boksene og kontrollerer om det er innenfor det tillatte range.
Here er getCheckedCount () metode:
private int getCheckedCount () {int teller = 0; foreach (objekt avkrysningsboks i _checkBoxes) {bool; if (avmerkingsboksen er listitem) valgt = ((listitem) avmerkingsboks) .Selected; if (avmerkingsboksen er avmerkingsbokser) valgt = ((avmerkingsbokser) avmerkingsboks) .checked; if (valgt) teller ++; } Avkastning teller;}
Du kan legge merke til listen _checkBoxes faktisk inneholder ikke bare boksene. Det er en liste over objekter, og kan inneholde avkrysningsruten objekter, samt listitem objects.
This er at validatoren å håndtere både boksen og CheckBoxList objects.You finner getCheckBoxes () metoden i vedlagte kildefilen. Anmeldelser
Det er en annen metode validator behov for å overstyre: ControlPropertiesValid.The BaseValidator påkaller denne metoden for å kontrollere om ControlToValidate eiendommen er riktig satt
beskyttet ride bool ControlPropertiesValid () {_controlToValidate = Page.FindControl (ControlToValidate. ); bool IsValid = _controlToValidate er avmerkingsbokser || _controlToValidate er CheckBoxList || _controlToValidate.Controls.
Count>