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

#asp.net #validation #inheritance #web-controls

#asp.net #проверка #наследование #веб-элементы управления

Вопрос:

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

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

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

Это, по-видимому, означает либо

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

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

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

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

Ответ №1:

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

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

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

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

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

да… в целом, просто обычный бизнес CompositeControl…..