Как вызвать методы главной страницы со страницы содержимого, когда кнопка находится внутри панели обновления?

у меня есть masterpage и страницей контента. На странице содержимого у меня есть диспетчер сценариев и панель обновления. На панели обновления я хочу иметь возможность нажать кнопку, которая ударит по общедоступному методу на главной странице, чтобы показать сообщение. Это работает, если у меня нет панели обновления на странице содержимого, но есть ли способ заставить ее работать, когда кнопка находится в панели обновления?

Главная Страница:

public void ShowMessage(string Message) 
{
    lblError.Text = Message; 
    lblError.Visible = True; 
}

Содержание Страницы:

Master.ShowMessage("something");

5 ответов


Я думаю, что это немного поздно , но для тех, кто ищет решение,

предполагая, что ваш мастер-класс страницы, как:

public MyMAsterPage: MasterPage
{
    public void ShowMessage(string Message) 
    {
       // DO SOMETHING
    }
}

со страницы содержимого вы можете легко вызвать любой открытый метод следующим образом:

(this.Master as MyMasterPage).ShowMessage("Some argument");

функция, которая определяется в masterpage:

public void Mesaj(string msj)
{
        lbl_Mesaj.Text = msj;
}

функция, которая определяет на странице содержимого

protected void Page_Load(object sender, EventArgs e)
{
    MasterPageWeb master = (MasterPageWeb)this.Master;
    master.Mesaj("www.zafercomert.com");
}

вы можете вызвать функцию masterpage со страницы содержимого, как это.


Я закончил тем, что просто всасывал его и помещал диспетчер сценариев на главную страницу и помещал метку на главную страницу внутри панели обновления.


вам потребуется

this.button1 = this.Master.FindControl("UpdatePanel1").FindControl("Button1") as Button;

здесь блоге, чтобы помочь описать процесс. По сути, вы углубляетесь в управление.

редактировать

Извините, я просто перечитал ваш вопрос. Код выше позволит вам найти кнопку на Вашей странице Masterpage с вашей страницы содержимого codebehind.

немного сложнее выполнить метод Masterpage codebehind со страницы содержимого. Лучшим способом может быть JavaScript событие для вашей кнопки (или просто используйте jQuery) и поместите код для JavaScript модальное окно в вашей Masterpage.

<!-- script stuff -->
    <script>
    $(function() {
        $( "#dialog" ).dialog({
            autoOpen: false
        });

        $( "#opener" ).click(function() {
            $( "#dialog" ).dialog( "open" );
            return false;
        });
    });
    </script>
<!-- end script stuff -->

<!-- dialog div -->
    <div id="dialog" title="Basic dialog">
        <p>say something meaningful</p>
    </div>
<!-- end dialog div -->

<!-- content page stuff -->
    <button id="opener">open alert</button>
<!-- end content page stuff-->

Если вы действительно подключены к вызову метода masterpage со страницы содержимого, вам нужно сделать метод общедоступным

найти информацию в Шаг 4: вызов открытых членов главной страницы со страницы контента

есть два способа, которыми страница содержимого может программный интерфейс с главной страницы:

  • на странице.Master свойство, которое возвращает слабо типизированную ссылку на главную страницу, или
  • укажите тип главной страницы или путь к файлу страницы с помощью директивы @MasterType; это автоматически добавляет строго типизированное свойство к странице с именем Master.

основываясь на решении Амина, я использовал метод расширения для решения этого чаще.

public static T GetMasterPageObject<T>(this MasterPage masterPage) where T : MasterPage
{
    return (T)masterPage;
}

пример:

this.Master.GetMasterPageObject<MasterPageClass>().MethodYouNeed("Parameters");