2010-01-23 12 views
3

На днях я создал пользовательский элемент управления, который динамически создает отображение данных из заданного бизнес-объекта.Использование общих типов с пользовательским управлением asp.net

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

Мой пользовательский элемент управления просто содержит основные элементы управления html и несколько внутренних свойств, поэтому я могу получить к ним доступ из моего другого класса.

В той же сборке у меня есть класс DataManager - он принимает IEnumerable и ссылку на связанный с ним пользовательский элемент управления. Проблема в том, что мне приходится обрабатывать детали реализации, такие как перерисовка на странице_Init со страницы, вызывающей элемент управления, поскольку фактический пользовательский элемент управления не знает T.

Есть ли способ передать общий тип пользовательскому элементу управления для упрощения вещи или способ хранения ссылки на объект DataManager без указания T?

Благодарим за помощь!

+0

Можете ли вы редактировать и давать образцы кода? Это очень запутанно, как описано. Меня заинтересовали, и я хотел бы помочь, но мне трудно разобраться в проблемах. –

ответ

2

Вот несколько идей, мысли:

Вы пытаетесь достичь развязки между вашей презентацией (управлениями пользователем) и конкретным типом вашего бизнеса объектом.

Но у вас проблемы, потому что вы тесно связали доступ к данным (DataManager) и презентацию (пользовательский контроль) вашего приложения.

Возможно, вам стоит перенести свою цель на развязку уровня презентации с бизнес-объектов и уровня данных.

Некоторые идеи, которые могут помочь вам в этом, включают в себя: 1) Рассмотрите возможность создания свойства в пользовательском элементе управления, в котором хранятся данные, и установите это свойство в загрузке страницы или странице init..если вы обнаружите, что сражаетесь с страницей lifecyle поскольку загрузка страницы управления запускается перед событием загрузки страницы страницы, просто создайте свой собственный метод привязки в пользовательском элементе управления пользователя и вызовите его после того, как вы установили свойство пользовательских элементов управления с данными . 2) Создайте интерфейс или модель представления данных, передаваемых в пользовательский элемент управления и используйте это как тип свойства, в котором хранятся ваши данные. Вы можете сохранить тип generic, но я изо всех сил пытаюсь думать о пользовательском элементе управления, который будет работать с любым бизнес-объектом, о котором я могу мечтать, поэтому это похоже на плохая идея 3) Независимо от деталей реализации DataManager, имеющий ссылку на пользовательский элемент управления, - это то, что вам нужно изменить. Объект, называемый DataManager, должен нести единую ответственность и должен получать данные и не знать о пользовательском контроле или презентации вашей заявки.

Надеюсь, это поможет. Только одно мнение ребят, удачи.