Разработка валидации для редактируемых веб-элементов управления asp.net

В приступе раздражения от элементов управления проверкой Asp.Net (разрозненных, подробных, неудобных) я решил посмотреть, смогу ли я создать серию элементов управления вводом, каждый из которых несет свои собственные методы и свойства проверки.

Один из моих критериев проектирования - разрешить моим свойствам проверки отображаться в VS intellisense как атрибуты тега вместе с остальными свойствами элемента управления.

Моей первой мыслью было создать базовый класс, который наследуется от WebControl и реализует новые свойства и методы, но без множественного наследования, что означало бы невозможность наследования, скажем, TextBox.

Это, кажется, означает либо

  • наследование от каждого элемента управления WebControl (TextBox, DropDown и т. д.) и (повторное) кодирование общих свойств и методов валидации для каждого из моих классов управления (с интерфейсом или без него, который кажется расточительным), или

  • кодирование базового класса (скажем, ValidatedInputControl) один раз и поиск способа реализации отдельных WebControls (текстового поля и т. д.) в классах, которые наследуются от ValidatedInputControl. Я подозреваю, что это означает рендеринг и т. Д., Или,

  • найти какой-то другой паттерн / дизайн, который будет работать более эффективно

Итак, ищу предложения ...


person Serexx    schedule 19.04.2011    source источник


Ответы (1)


Почему глупые вопросы через несколько часов всегда выглядят еще глупее ...

Для всех, кому интересно, это не так сложно разобраться после перерыва и ужина ... полиморфизм 101 и немного магии .Net ...

Создайте конкретный класс (MyBaseClass) с членами, которые вы хотите унаследовать от всех производных элементов управления. Наследуйте этот базовый класс от класса CompositeControl.

Теперь создайте отдельные элементы управления, которые вы хотите (myTextBox, myDropDown и т. Д.) Унаследовать от MyBaseClass - эти отдельные классы управления теперь относятся к типам MyBaseClass и CompositeControl.

Итак, внутри каждого отдельного класса управления (скажем, MyTextBox) теперь вы можете создать экземпляр соответствующего собственного элемента управления (TextBox) и управлять им, как любым составным элементом управления, но он также имеет доступ к членам MyBaseClass.

да ... в общем, просто CompositeControl, как обычно ...

person Serexx    schedule 20.04.2011