使用ajax技术将数据从内容页面发布到母版页

时间:2014-06-19 20:54:58

标签: c# asp.net ajax updatepanel master-pages

我正在开发基于ASP.Net和C#的Web应用程序。 当我单击“内容”页面中的按钮时,我想将数据(字符串)传递给母版页并将其显示给用户。我知道技术和代码,但问题在于Ajax。 由于内容页面中的按钮位于Updatepanel内部,因此当我单击该按钮时,消息将不会出现在母版页中。因为只有页面的一部分会反感并且我不知道,如何刷新母版页

内容页面内的代码:

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder_Body_Member" ...>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
                    <asp:TextBox ... ></asp:TextBox>
                    <asp:Button ID="ShowText" ... />
    </ContentTemplate>
    </asp:UpdatePanel>

masterPage中的代码(实际上这是一个嵌套的masterPage):

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder_TopRightSide" runat="server"> ... </asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder_Menu" runat="server"> ... </asp:Content>

<asp:Content ID="Content3" ContentPlaceHolderID="ContentPlaceHolder_Body" runat="server">
          <asp:ContentPlaceHolder ID="ContentPlaceHolder_Body_Member" runat="server">  </asp:ContentPlaceHolder>
  </asp:Content> 

<asp:Content ID="Content4" ContentPlaceHolderID="ContentPlaceHolder_Footer" runat="server">    
<asp:UpdatePanel runat="server" id="UpdatePanel" updatemode="Conditional">          
        <ContentTemplate>               
                           <asp:Label ID="DataFromPage" ... ></asp:Label>                                                                                                                                 
        </ContentTemplate>
    </asp:UpdatePanel>
</asp:Content>

按钮是“ContentPlaceHolder_Body_Member”,标签位于“ContentPlaceHolder_Footer”

1 个答案:

答案 0 :(得分:1)

要获得您需要的结果,您只需要对您的母版页设计进行一些更改,如下面的代码:

在您的母版页上首先将内容占位符放在更新面板中:

 <asp:UpdatePanel ID="UpdatePanel1" runat="server">
     <ContentTemplate>
         <asp:Label ID="DataFromPage" runat="server" Text="Label"></asp:Label>
         <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"></asp:ContentPlaceHolder>
     </ContentTemplate>
 </asp:UpdatePanel>

然后在您的内容页面中,您将拥有类似的内容(几乎与您的相同

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
  <asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
    </ContentTemplate>
  </asp:UpdatePanel>
</asp:Content>

最后在您的代码隐藏按钮单击事件中,您可以将值分配给母版页的标签控件,如下所示的代码:

    protected void Button1_Click(object sender, EventArgs e)
    {
        Label myLabel = Page.Master.FindControl("UpdatePanel1").FindControl("DataFromPage") as Label;
        myLabel.Text = "this is a message from my content page";
    }

结果如下:

enter image description here

更新1

好的,请记住,如果你有一个嵌套的更新面板,那么你在那个中找到控件的方式也有所不同,如果你需要在另一个内容页面上进行更改,你需要强制更新面板进行更改你的代码落后了,所以你的代码应该是这样的:

//您的按钮控件的事件需要找到更新面板和标签:

    protected void Button1_Click(object sender, EventArgs e)
    {
        UpdatePanel myUpdatePanel = Page.Master.Master.FindControl("ContentPlaceHolder_Footer").FindControl("UpdatePanel") as UpdatePanel;
        Label myLabel = Page.Master.Master.FindControl("ContentPlaceHolder_Footer").FindControl("DataFromPage") as Label;
        myLabel.Text = "this is a message from my content page";
        myUpdatePanel.Update(); //force the panel to get updated
    }

干杯