ASP: расширение управления (ASCX) и доступ к базовому файлу разметки из кода подкласса - PullRequest
0 голосов
/ 29 января 2010

Я создаю средства проверки формы для нашего приложения на C # ASP. Большая часть работы обрабатывается элементом управления BaseValidator (подкласс System.Web.UI.UserControl), который также имеет разметку для вывода проверки. Затем это расширяется подконтролями, такими как PasswordValidator, который предоставляет метод Validate и любые дополнительные поля, необходимые для этого элемента управления validator.

(Конечная цель - иметь такие элементы управления, как , которые мы можем использовать в любой форме с минимальным дублированием.)

Однако PasswordValidator.ascx.cs не может получить доступ к элементам формы, определенным в BaseValidator.ascx; Единственный способ, который я нашел, - дублировать разметку в файле * .ascx каждого субконтроля. Как я могу расширить BaseValidator.ascx.cs и получить доступ к разметке BaseValidator.ascx в подклассе?

Ответы [ 3 ]

0 голосов
/ 30 января 2010

Если у вас есть истинный базовый класс для вашего элемента управления BaseValidator, который расширяет ваш PasswordValidator, то любая разметка / элементы управления в базовом классе должны быть доступны через защищенные свойства. Я бы даже зашел так далеко, что утверждал, что у истинной базы не должно быть части ascx. Базовый класс должен предоставлять методы и свойства, которые предоставляют элементы управления встроенным на лету (вероятно, во время Page_Init для поддержки viewstate).

Если у вас есть 2 отдельных элемента управления на одной и той же странице, ваша родительская страница может быть изменена, чтобы обеспечить брокерские методы, позволяющие такое общение.

Если у вас есть PasswordValidator и вам просто нужны элементы управления / разметка, вы можете использовать метод LoadControl , чтобы создать экземпляр BaseControl в памяти, получить доступ к его элементам управления / разметке программно и либо добавить его, либо уничтожьте его в зависимости от того, что вы хотите с ним сделать.

За исключением всего этого, все будет так, как сказал @Shawn. Управление сервером.

0 голосов
/ 17 марта 2010

Спасибо за предложения.

Я решил это, используя сервис и шаблон стратегии. Существует центральный класс FieldValidator, который обеспечивает проверку для любого пользовательского интерфейса. Для веб-интерфейса эти методы предоставляются через WebService и (через WebService) UserControl. Нет проблем с доступом к элементам страницы, потому что теперь существует только один класс UserControl, который стоит между формой и WebService.

Например, <uc1:FieldValidator ControlType="Password" ControlToValidate="txtPassword" runat="server" > будет выполнять полнофункциональную проверку на стороне клиента и на стороне сервера без необходимости в коде. Большой! :)

(Я упомянул разрешение в ответ на мой вопрос, но не могу пометить это как ответ.)

0 голосов
/ 30 января 2010

Я почти уверен, что для этого вам нужно будет создать элементы управления сервером. Это означает, что вам нужно будет генерировать выводимую разметку из кода в элементе управления, а не в файле .ascx.

...