Разработка валидации для Editable asp.net WebControls - PullRequest
1 голос
/ 19 апреля 2011

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

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

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

Кажется, что это означает либо

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

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

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

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

1 Ответ

0 голосов
/ 20 апреля 2011

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

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

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

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

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

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

...