Как получить элемент управления в главной странице со страницы содержимого - PullRequest
2 голосов
/ 23 февраля 2011

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

    Label lbl = this.Master.Page.FindControl("uxLabel") as Label;
//Note any server controls defined in the master page could be not be accessible even after a cast is performed, because they could be marked as protected

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

На главной странице:

public Label HeaderLabel
{
    get { return uxLabel; }
}

Использование MasterType на странице содержимого:

    <%@ MasterType VirtualPath="~/Templates/WebsiteMasterPage.master" %>

Теперь довольно просто найти элемент управления на странице содержимого:

protected void Page_Load(object sender, EventArgs e)
{
    this.Master.HeaderLabel.Text = "Any Text here!";
}

Я хотел бы знать:

  • что вы думаете об этом подходе?Любое другое решение?

Спасибо за ваше время

1 Ответ

2 голосов
/ 23 февраля 2011

Мой ответ: «, почему бы и нет? ».

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

Второй подход, назовите его «типизированный подход», просто приведен к определенному классу главной страницы, и вы получите доступ к любому члену, специфичному для класса.

Какова будет основная проблема «типизированного подхода»?Вам нужна ссылка на библиотеку классов (сборку), чтобы получить доступ к таким членам главной страницы, что нежелательно в некоторых сценариях.Например, у вас есть библиотека элементов управления, и вы хотите получить доступ к обязательному элементу управления главной страницы, который предоставляет некоторые варианты поведения, необходимые для работы с элементом управления некоторой библиотеки.Вам нужно будет сослаться на вашу сборку веб-клиента, но вы не можете сделать это, потому что вы ссылаетесь на свою управляющую библиотеку в самом веб-клиенте, и это циклическая ссылка.

Инструменты, подходы есть для использования в конкретных сценариях. Почему бы и нет? Ответ можно расширить до Почему бы не использовать "типизированный подход", если он необходим, и ваш сценарий совместим с этой концепцией? .

...