ASP.NET - может ли страница содержимого вызывать функцию на своей главной странице? - PullRequest
1 голос
/ 30 января 2010

У меня есть сайт с главной страницей, Site.master. Многие страницы контента Site.master имеют одинаковую кнопку, которая функционирует одинаково на каждой странице:

<asp:ImageButton ID="btn" runat="server" OnClick="btn_Click" />

Можно ли написать btn_Click один раз в CodeFile Site.master и вызвать его в атрибуте OnClick кнопки каждой страницы контента? Я пытаюсь не добавлять одну и ту же функцию (или что-либо вообще) в CodeFile каждой страницы содержимого.

Спасибо!

Ответы [ 5 ]

3 голосов
/ 30 января 2010

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

2 голосов
/ 30 января 2010

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

В противном случае, с помощью MasterType вы можете строго ввести свойство Page.Master . возможно возможно подключить кнопку вроде:

<asp:ImageButton ID="btn" runat="server" OnClick="Master.btn_Click" />

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

public string ButtonId { get; set; }

override OnLoad(EventArgs e) {
   var b = Page.FindControl(this.ButtonId ?? "btn") as Button;
   if (b != null) b.Click += this.On_Click;
}
1 голос
/ 30 января 2010

Почему бы не инкапсулировать ImageButton и его обработчик кликов в UserControl? Тогда вам не нужно будет повторять код.

1 голос
/ 30 января 2010

Если кнопка находится на каждой странице, есть ли какая-то причина, по которой на самом деле не нужно помещать кнопку в Мастер?

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

1 голос
/ 30 января 2010

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

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