How to change the MasterPage tag of the content page without updating the page

advertisements

I've got MasterPage and Content Page. On the ContentPage there is some label and i want to change it's text when clicked on button on the content page without refreshing the page.

Default.aspx

 <%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" %>

<script runat="server">

    protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
    {
        Label SensorTemperatureLabel = (Label)this.Master.FindControl("SensorTemperatureLabel");

        if (SensorTemperatureLabel != null)
        {
            SensorTemperatureLabel.Text = "TEST";
        }
    }
</script>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
           <asp:ImageButton ID="ImageButton1" runat="server" OnClick="ImageButton1_Click" />

</asp:Content>

MasterPage.master Part of the code with label

<div class="sidebar">
        <!-- insert your sidebar items here -->
          <asp:UpdatePanel ID="UpdatePanel1" runat="server">
              <ContentTemplate>
                  <asp:Label ID="SensorTemperatureLabel" runat="server" Text="Label"></asp:Label>
              </ContentTemplate>
          </asp:UpdatePanel>
      </div>


I have prepared you complete solution to show you how you can do this.

First sample master. Take notice I have added ScriptManager to page and target label is inside content template:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site1.master.cs" Inherits="WebTester.Site1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <div>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <asp:Label ID="SensorTemperatureLabel" runat="server" Text="TEMP"></asp:Label>
            </ContentTemplate>
        </asp:UpdatePanel>
        <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
        </asp:ContentPlaceHolder>
    </div>
    </form>
</body>
</html>

Now here is content page, button is also placed inside content template:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site1.Master" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebTester.WebForm1" %>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Test" />
        </ContentTemplate>
    </asp:UpdatePanel>
</asp:Content>

And finally here is the code, I get refrence to label by using FindControl:

protected void Button1_Click(object sender, EventArgs e)
{
    Site1 site = this.Master as Site1;
    if (site != null)
    {
        Label SensorTemperatureLabel = site.FindControl("SensorTemperatureLabel") as Label;
        SensorTemperatureLabel.Text = DateTime.Now.ToString();
    }
}

This code will update label on master page without complete page postback.