当按钮位于更新面板内时,如何从内容页面调用母版页方法?

时间:2010-10-21 16:03:30

标签: c# asp.net .net-4.0

我有一个母版页和一个内容页面。在内容页面中,我有一个脚本管理器和一个更新面板。在更新面板中,我希望能够单击一个按钮,该按钮将触及母版页上的公共方法以显示消息。如果我在内容页面上没有更新面板但是当按钮位于更新面板中时是否有办法让它工作,这是有效的吗?

母版页:

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

内容页面:

Master.ShowMessage("something");

6 个答案:

答案 0 :(得分:16)

我认为这有点晚了,但对于那些正在寻找解决方案的人来说,

假设您的母版页类如:

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

从您的内容页面中,您可以轻松调用任何公开方法,如下所示:

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

答案 1 :(得分:6)

在主页中定义的功能:

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");
}

您可以从这样的内容页面调用母版页的功能。

答案 2 :(得分:2)

我最终只是将它吮吸并将脚本管理器放在母版页上并将标签放在更新面板内的母版页上。

答案 3 :(得分:0)

你需要

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

这是一个blog post来帮助描述这个过程。基本上你正在深入了解你的控件。

修改

对不起,我刚刚重新阅读了您的问题。上面的代码将允许您从内容页面代码隐藏在主页上找到一个按钮。

从内容页面执行Masterpage代码隐藏方法要困难一些。更好的方法可能是对您的按钮的JavaScript事件(或只是使用jQuery),并将JavaScript modal window的代码放在您的母版页中。

<!-- 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-->

无论其

如果您真的喜欢从内容页面调用母版页方法,则需要将该方法设为公开

Step 4: Calling the Master Page's Public Members from a Content Page

中查找信息
  

内容页面可以通过两种方式以编程方式与其母版页进行交互:

     
      
  • 使用Page.Master属性,该属性返回对母版页的松散类型引用,或
  •   
  • 通过@MasterType指令指定页面的母版页类型或文件路径;这会自动将强类型属性添加到名为Master的页面。
  •   

答案 4 :(得分:0)

根据Amin的解决方案,我使用扩展方法来更频繁地解决这个问题。

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

示例:

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

答案 5 :(得分:0)

<%@ MasterType VirtualPath="~/masters/SourcePage.master" %>

Master.Method(); (在代码后面)