Host Page - Пользовательский контроль связи ASP.NET - PullRequest
0 голосов
/ 09 марта 2009

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

Как настроить параметр на странице хоста, к которому имеют доступ ВСЕ пользовательские элементы управления?

Ответы [ 3 ]

2 голосов
/ 09 марта 2009

Ваше описание «Поведение пользовательских элементов управления различается в зависимости от того, на какой странице они используются», указывает на недостаток дизайна. Модель управления в ASP.NET разработана на основе encapsulation и OOP , что означает, что элемент управления должен быть независимым от окружающего контекста. Вы должны переосмыслить свой дизайн с учетом этого.

При этом вполне возможно ( предупреждение - плохая практика ) установить на вашей странице открытое свойство, которое элементы управления могут читать:

class MyPage : Page
{
    public string MyProperty;
}

class MyUserControl : UserControl
{
    void Page_Load(object sender, EventArgs e)
    {
        ((MyPage)this.Page).MyProperty //casts Page as the specific page
    }
}
0 голосов
/ 09 марта 2009

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

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

0 голосов
/ 09 марта 2009

Я согласен с Рексом, я с подозрением отношусь к требованию.

Тем не менее, я считаю, что чище поместить его в коллекцию HttpContext.Current.Items. Страница установит значение предпочтительно в своем OnInit, используя красивый класс, обертывающий ее, чтобы получить информацию.

Если вы хотите, чтобы программа-оболочка действительно читала текущий URL-адрес или проверила тип страницы (обычно это текущий обработчик получите решение, которому не нужна страница, чтобы вообще что-то устанавливать.

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