2014-06-19 146 views
0

我正在开发基于ASP.Net和C#的Web应用程序。 当我点击内容页面中的按钮时,我想将数据(字符串)传递给Masterpage并将其显示给用户。我知道技术和代码,但问题出在Ajax上。 由于内容页面中的按钮位于UpdatePanel内部,因此当我单击该按钮时,消息不会出现在主页面中。因为只有部分页面时便会refrsh,我不知道,如何refesh使用ajax技术将数据从contentpage发布到主页面

代码中contentpage母版页:

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

代码中的母版(其实这是一个嵌套母版) :

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

按钮insde的 “ContentPlaceHolder_Body_Member”,标签是 “ContentPlaceHolder_Footer” 里面

回答

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> 

最后,在你的代码-b ehind按钮点击事件,你可以你的价值分配到如下所示的母版页的标签控件,如代码:

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

好的,记住如果你有一个嵌套更新面板,那么你发现那个控件的方式有点不同,如果你需要在其他内容页面上进行更改,你需要f奥尔塞更新面板,使你的代码的变化背后,所以你的代码应该是这样的:

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

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 
    } 

干杯

+0

感谢您的回复。问题是,它们在不同的ContentPlaceHolder中。 contentPage中的按钮位于“ContentPlaceHolder_Body”的内部,masterPage中的标签位于“ContentPlaceHolder_Footer” – Parsa

+0

的内部,您是否可以发布母版页和内部内容页? –

+0

当然,我只是编辑我的帖子。请看看它。 – Parsa