У меня есть usercontrol, который используется на главной странице. Я добавил страницу с главной страницей.
Теперь мне нужно вызвать метод пользовательского элемента управления со страницы. Как это сделать? Пожалуйста, помогите.
У меня есть usercontrol, который используется на главной странице. Я добавил страницу с главной страницей.
Теперь мне нужно вызвать метод пользовательского элемента управления со страницы. Как это сделать? Пожалуйста, помогите.
Предполагая, что ваш метод является общедоступным, а ваш пользовательский тип управления - это ваш пользовательский интерфейс, попробуйте следующее:
YourUserControlsType ctrlAtMasterPage =
(YourUserControlsType)Page.Master.FindControl("YouControlsID");
ctrlAtMasterPage.YourPublicMethod();
Это должно получить вам контроль, даже если он был добавлен программно:
В члене страницы, которую вы добавили:
TextBox FoundTextBox = (TextBox)this.Master.FindControl("RunAtServerTextBoxServerID");
Если у вас нет ссылки на элемент управления, вы должны рассмотреть возможность отсоединения страницы от элемента управления. В идеальном мире страница не обязательно должна знать о контроле, который он может содержать или не может. Таким образом, вы можете изучить реализацию шаблона MVP.
Здесь есть простая реализация MVP здесь, и вы можете увидеть развязку в действии здесь. Если вы отмените связь с примером развязки (например, страница запускает событие, которое элемент управления выбирает), то в основном вы отделили свою страницу от элемента управления. Это имеет преимущество в том, что, если ваша страница меняется и элемент управления больше не используется, событие не подхватывается ничем, и ваша страница продолжает выполняться без проблем. Я считаю это гораздо более подходящим, чем потенциальное исключение с нулевой ссылкой, когда FindControl не находит элемент управления, а затем вы пытаетесь выполнить на нем метод.
В то время как развязка может занять несколько дополнительных минут, во многих сценариях это окажется достойной задачей.