【问题标题】:Post Data from contentpage to Masterpage using ajax technique使用 ajax 技术将数据从 contentpage 发布到 Masterpage
【发布时间】:2014-06-19 20:54:58
【问题描述】:

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

内容页面内的代码:

<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”内部

【问题讨论】:

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


    【解决方案1】:

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

    在您的母版页上,首先将 content-place-holder 放在更新面板中:

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

    结果如下:

    更新 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
        }
    

    干杯

    【讨论】:

    • 感谢您的回复。问题是,它们位于不同的 ContentPlaceHolder 中。 contentPage 中的按钮位于“ContentPlaceHolder_Body”内,masterPage 中的标签位于“ContentPlaceHolder_Footer”内
    • 您能否同时发布您的母版页和内部内容页?
    • 当然,我刚刚编辑了我的帖子。请看一下。
    猜你喜欢
    • 1970-01-01
    • 2012-06-01
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    相关资源
    最近更新 更多