简体   繁体   中英

How to change MasterPage's label from Content page without refreshing page

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>

If the label is not in <ContentTemplate /> , you can access with javascript

 var SensorTemperatureLabel = document.getElementById("<%=SensorTemperatureLabel%>");
 SensorTemperatureLabel.innerHTML = "newValue";

Otherwise, the ID is generated and you'll need

var SensorTemperatureLabel = document.getElementById("<%= this.Master.FindControl("SensorTemperatureLabel").ClientID %>");

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.

I hope my answer help in this case if you have Label in master page named " Label1" then you can change value there like this VB

Dim lb as label= me.master.findcontrol("Label1"):lb.text="Hello worold"

Peace upon you all.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM