52

我有一个包含状态消息标签的母版页。我需要从不同的 .aspx 页面设置状态文本。如何从内容页面做到这一点?

public partial class Site : System.Web.UI.MasterPage
{
    public string StatusNachricht
    {
        get
        {
            return lblStatus.Text;
        }
        set
        {
            lblStatus.Text = value;
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {            

    }
}

我已经尝试过了,但未能成功:

public partial class DatenAendern : System.Web.UI.Page
{
    var master = Master as Site;

    protected void Page_Load(object sender, EventArgs e)
    {               
        if (master != null)
        {
            master.setStatusLabel("");
        }
    }        

    protected void grdBenutzer_RowCommand(object sender, GridViewCommandEventArgs e)
    {           
            try
            {
                //some code

                if (master != null)
                {
                    master.setStatusLabel("Passwort erfolgreich geändert.");
                }
            }
            catch (Exception ex)
            {
                if (master != null)
                {
                    master.setStatusLabel("Passwort konnte nicht geändert werden!");
                }                                       
            }
        }
    }                   
}
4

7 回答 7

90

在 MasterPage.cs 文件中添加property如下Label

public string ErrorMessage
{
    get
    {
        return lblMessage.Text;
    }
    set
    {
        lblMessage.Text = value;
    }
}

在您的aspx页面上,就在页面指令下方添加以下内容:

<%@ Page Title="" Language="C#" MasterPageFile="Master Path Name"..... %>
<%@ MasterType VirtualPath="Master Path Name" %>   // Add this

然后在您的codebehind(aspx.cs)页面中,您可以轻松访问Label Propertytext根据需要进行设置。像这样:

this.Master.ErrorMessage = "Your Error Message here";
于 2013-03-22T15:08:41.247 回答
34

在内容页面中,您可以访问标签并设置文本,例如

这里 'lblStatus' 是您的母版页标签 ID

标签 lblMasterStatus = (Label)Master.FindControl("lblStatus");

lblMasterStatus.Text = "来自内容页面的测量";
于 2014-04-05T06:37:42.070 回答
11

有用

在子页面上查找母版页控件

Label lbl_UserName = this.Master.FindControl("lbl_UserName") as Label;                    
lbl_UserName.Text = txtUsr.Text;
于 2014-10-31T09:53:55.007 回答
4

我的 System.Web.UI.Page 类中有一个辅助方法

protected T FindControlFromMaster<T>(string name) where T : Control
{
     MasterPage master = this.Master;
     while (master != null)
     {
         T control = master.FindControl(name) as T;
         if (control != null)
             return control;

         master = master.Master;
     }
     return null;
}

然后您可以使用以下代码访问。

Label lblStatus = FindControlFromMaster<Label>("lblStatus");
if(lblStatus!=null) 
    lblStatus.Text = "something";
于 2014-05-20T18:16:25.717 回答
3

不能var在 field 中使用,只能在局部变量上使用。

但即使这样也行不通:

Site master = Master as Site;

因为您不能this在字段中使用并且Master as Sitethis.Master as Site. Page_Init因此,只需从页面完全初始化时初始化字段,您就可以使用this

Site master = null;

protected void Page_Init(object sender, EventArgs e)
{            
    master = this.Master as Site;
}
于 2013-03-22T15:05:48.933 回答
1

如果您有一个嵌套的 MasterPage,这会更加复杂。您需要首先找到包含嵌套 MasterPage 的内容控件,然后从中找到嵌套 MasterPage 上的控件。

关键位:Master.Master

见这里:http ://forums.asp.net/t/1059255.aspx?Nested+master+pages+and+Master+FindControl

例子:

'查找内容控件

Dim ct As ContentPlaceHolder = Me.Master.Master.FindControl("cphMain")

'现在在该内容中找到控件

暗淡 lbtnSave As LinkBut​​ton = ct.FindControl("lbtnSave")

于 2016-01-19T17:29:56.720 回答
1

如果您尝试访问一个 html 元素:这是一个 HTML 锚点...

我的导航栏的项目不是列表项 ( <li>),而是 html 锚点 ( <a>)

见下图:(这是站长)

<nav class="mdl-navigation">
    <a class="mdl-navigation__link" href="" runat="server" id="liHome">Home</a>
    <a class="mdl-navigation__link" href="" runat="server" id="liDashboard">Dashboard</a>
</nav>

现在在另一个页面后面的代码中,对我来说,它是登录页面......

在 PageLoad() 上定义这个:

HtmlAnchor lblMasterStatus = (HtmlAnchor)Master.FindControl("liHome");
lblMasterStatus.Visible =false;

HtmlAnchor lblMasterStatus1 = (HtmlAnchor)Master.FindControl("liDashboard");
lblMasterStatus1.Visible = false;

现在我们已经访问了站点主控件,并使其在登录页面上不可见。

于 2019-01-09T12:18:37.650 回答