вызов метода на родительской странице из пользовательского элемента управления - PullRequest
2 голосов
/ 03 мая 2010

Я использую созданный мной пользовательский элемент управления (просто файл .cs, а не файл .ascx), который выполняет некоторые действия, и в зависимости от значения, сгенерированного элементом управления, мне нужно, чтобы он что-то сделал на родительской странице, которая «Хостинг» управления. Он должен вызывать метод при определенных обстоятельствах (метод находится на родительском контроле).

элемент управления размещается на родительской странице следующим образом:

<customtag:MyControl ID="something" runat="server" />

Я динамически создаю кнопки и т. Д. На самом элементе управления, но когда кнопка нажата, скажем, например, что на элементе управления есть текстовое поле, и если значение этого поля равно «bob», ему нужно вызвать метод на странице, где находится элемент управления ... как мне это сделать?

Ответы [ 3 ]

3 голосов
/ 03 мая 2010

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

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

0 голосов
/ 03 мая 2010

Я думаю, что casperOne на правильном пути, но вам нужно сделать шаг вперед. Я хочу сделать предположение, что этот пользовательский элемент управления будет использоваться более, чем на странице. (Я обычно пишу VB.Net, извините, если мой C # искажен)

Создайте базовый класс страницы (вы можете сохранить его в каталоге App_Code или в проекте):

public class PageToInheritFrom : System.Web.UI.Page {
    public void SpecialFunction() {
    }    
}

Теперь убедитесь, что все ваши страницы наследуются от этой страницы в вашем коде файла:

public partial class _Default : PageToInheritFrom {

}

Теперь в вашем пользовательском контроле вы знаете тип страницы и можете звонить

((PageToInheritFrom)this.Page).SpecialFunction();
0 голосов
/ 03 мая 2010

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

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