如何在没有刷新页面的情况下从内容页面更改MasterPage的标签

时间:2012-11-23 18:26:57

标签: c# asp.net .net updatepanel

我有MasterPage和内容页面。在ContentPage上有一些标签,我想在单击内容页面上的按钮时更改它的文本而不刷新页面。

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 带标签的部分代码

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

3 个答案:

答案 0 :(得分:1)

如果标签不在<ContentTemplate />中,您可以使用javascript访问

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

否则,会生成ID,您需要

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

答案 1 :(得分:1)

我为您准备了完整的解决方案,向您展示如何做到这一点。

第一个样本大师。请注意我已将ScriptManager添加到页面,目标标签位于内容模板中:

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

现在这里是内容页面,按钮也放在内容模板中:

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

最后这里是代码,我通过使用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();
    }
}

此代码将更新母版页上的标签,而不会完整回页。

答案 2 :(得分:0)

我希望在这种情况下我的回答有所帮助 如果您在名为“Label1”的母版页中有Label,那么 你可以像这样改变价值 VB

>>> [v for vals in {**data_type, **data_struture}.values() for v in vals]
['int', 'bool', 'float', 'complex', 'str', 'None', 'bytes', 'list', 'dict', 'tuple', 'bytearray', 'set', 'frozenset']

和平对你们所有人。