Переопределение Web.config не влияет на пользовательские элементы управления

У меня есть подпапка со страницей aspx и файлом web.config, который переопределяет строку подключения в файле web.config в корневом каталоге. Проблема заключается в том, что если страница aspx содержит какие-либо пользовательские элементы управления, пользовательские элементы управления по-прежнему получают строку подключения из файла web.config в корневом каталоге. Есть ли способ заставить их использовать web.config, который использует родительская страница aspx?


person jhunter    schedule 18.06.2009    source источник


Ответы (3)


Я предполагаю, что ваши пользовательские элементы управления находятся в корневом каталоге или в каталоге, в котором нет web.config, поэтому они используют корневой web.config. Причина проблемы вот в чем.

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

person Canavar    schedule 19.06.2009

Я предполагаю, что ваш пользователь контролирует некоторое место в реализации пользовательского элемента управления, читающего непосредственно из web.config. Однако это связывает информацию с пользовательским элементом управления, которая действительно имеет отношение к пользовательскому элементу управления. (информация о том, как получить строку подключения, а не саму строку подключения). Эта привязка нарушает принцип единой ответственности и (косвенно) является причиной вашей проблемы. Вместо чтения соединения внутри пользовательского элемента управления. Предоставьте строку подключения как свойство и установите ее на странице при создании экземпляра элемента управления.

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

person Rune FS    schedule 19.06.2009

Если это просто строка подключения (или всего несколько переменных настройки), вы можете просто передать их своему элементу управления с родительской страницы.

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

На вашей странице aspx

<%Reference Src="path/to/your/control"%>

Сторона кода (aspx)

// - check if this works first
ASP.class_name_of_control_ascx(override_connection_string); 

// Other wise - created place holder on page for control/find control on page
UserControl ctrl = new ASP.class_name_of_control_ascx();
PlaceHolderOnPage.Controls.Add(ctrl);
((ASP.class_name_of_control_ascx)ctrl).RunMethod(override_connection string);

А затем на стороне управления просто настройте конструктор по умолчанию и конструктор переопределения, чтобы принять строку подключения с родительской страницы aspx.

В вашем контроле вы просто использовали бы эту строку подключения переопределения.

person dan richardson    schedule 19.06.2009