Вызов функции из UserControl в ASPX из UserControl в MasterPage - PullRequest
0 голосов
/ 31 января 2011

У меня есть MainLayout.master, на котором есть UC_Menu.ascx.

У меня есть страница с именем Customer.aspx, которая использует MainLayout.master.Customer.aspx также содержит UserControl с именем UC_Details.ascx.

Как я могу заставить UC_Menu.ascx вызывать функцию, которая находится в UC_Details.ascx с этим сценарием?

Я видел несколько похожих примеров, но ни один из них не соответствует макету этого типа.

Ответы [ 3 ]

3 голосов
/ 31 января 2011

По моему мнению, вам следует вызвать событие из UC_Menu.ascx, затем обработать его на главной странице и снова вызвать событие с главной страницы. Наконец, вы можете перехватить событие с помощью обработчика события в Customer.aspx и вызвать функцию из UC_Details.ascx.

Итак, код для этой проблемы должен быть:

1) Внутри вашего UC_Menu.ascx.vb поднять событие:

Partial Class UserControls_UC_Menu
    Inherits System.Web.UI.UserControl

    Public Event SomethingChanged As EventHandler

    Public Sub SomethingHappend()
        RaiseEvent SomethingChanged(Me, EventArgs.Empty)
    End Sub

End Class

2) В главной странице перехватить событие и поднять его до Customer.aspx

Public Event SomethingChanged As EventHandler

Private Sub UC_MenuInstance_SomethingChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles UC_Menu.SomethingChanged
     RaiseEvent Me.SomethingChanged(Me, EventArgs.Empty)
End Sub

3) Определите в разметке Customer.aspx после директивы страницы:

<%@ MasterType VirtualPath="~/MasterPages/MainLayout.master" %>

4) Внутри UC_Details.ascx.vb определите некоторый метод, который должен быть вызван:

Public Sub DoWork()
   'Do some work here
End Sub

5) Поместить в Customer.aspx.vb:

' Add handler for Master page event
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
    AddHandler Me.Master.SomethingChanged, AddressOf MasterEventHandler
End Sub

' Call UC_Details user control function here
Private Sub MasterEventHandler(ByVal source As Object, ByVal e As EventArgs)
        UC_DetailsInstance.DoWork()
    End Sub
1 голос
/ 31 января 2011

Интересный сценарий. Пусть страница реализует интерфейс:

public interface IDetailsPage
{
   UC_Details DetailsControl { get; }
}

Страница будет затем непосредственно выставлять контроль над свойством. В UC_Menu используйте:

if (this.Page is IDetailsPage)
    ((IDetailsPage)this.Page).DetailsControl.CallMethod();

НТН.

0 голосов
/ 31 января 2011

Вы должны найти UC_Menu на главной странице и вызвать его метод:

var c = (UC_Menu) Master.FindControl("UC_Menu");
if (c != null)
{
    c.CallMethod();
}

Оформить заказ это статья.

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