我正在开发基于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”
内答案 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";
}
结果如下:
更新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
}
干杯