Переопределение Web.config не влияет на элементы управления пользователя - PullRequest
1 голос
/ 19 июня 2009

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

Ответы [ 3 ]

2 голосов
/ 19 июня 2009

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

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

1 голос
/ 19 июня 2009

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

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

0 голосов
/ 19 июня 2009

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

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

На вашей странице 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.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...