如何在事件中更改Root.master中的文本?

时间:2016-04-06 08:44:45

标签: c# asp.net login master-pages

我在VS 2013中有一个带有母版页的项目。在Root.master中,我有"登录"它将我重定向到登录页面。

<a href="Logare.aspx" runat="server" id="loginLink">Log In</a>

当我登录时,我被重定向到某个页面,让我们说它是Default.aspx。

在Default.aspx.cs中我有:

if (Session["username"] == null)
            {
                Response.Redirect("Logare.aspx");
            }
            else
            {
                loginLink.Text ="Welcome, "+ Session["username"];
            }

当我从Root.master登录文本以更改&#34;登录&#34;时,我该怎么办呢?到&#34;欢迎,用户名&#34;?我试图从Root.master获取loginLink id,但在Default.aspx.cs中不知道。

更新

这是&#34;登录&#34;来自Root.master现在:

<a href="Logare.aspx"><asp:Label ID="Label8" runat="server" Text="Log In"></asp:Label></a>

在Default.aspx.cs中我现在有:

if (Session["username"] == null)
            {
                Response.Redirect("Logare.aspx");
            }
            else
            {
                Label mpLabel = new Label();
                mpLabel = (Label)Master.FindControl("Label8");                                   mpLabel.Text = "Welcome, " + Session["username"];
            }

但是,有了这个,我收到了错误

  
    

对象引用未设置为对象的实例。

  

mpLabel.Text = "Welcome, " + Session["username"];

1 个答案:

答案 0 :(得分:0)

因此,如果我正确地理解了您的问题,那就是从后面的内容页面代码中访问主页面上声明的控件。您有两种方法可以实现这一目标。

  1. 的FindControl
  2. 代码很简单(借用OP自己的评论):

    Label mpLabel = (Label) Master.FindControl("loginLink");
    

    但请注意,FindControl仅适用于控件的直接子项。所以如果你的结构看起来像

    MasterPage
        Control1
            Control2
                loginLink
    

    你需要这样的东西:

    Control c1 = Master.FindControl("Control1");
    Control c2 = c1.FindControl("Control2");
    Label mpLabel = (Label) c2.FindControl("loginLink");
    

    或者,您可以使用FindControl的递归版本。它不是开箱即用的,但很多(很多)版本已经在网上。这是one

    1. 通过Master&#39接口公开控件
    2. 在您的母版页代码后面定义一个类似的属性:

      public Label LoginLabel
      {
          get { return this.loginLabel; }
      }
      

      在内容页面上使用它。别忘了把大师演绎到你的特定类型:

      Label loginLabel = ((YourMasterPageClass)Master).LoginLabel;
      

      这可能不是特别安全,因此您只能公开标签文字:

      public Label LoginLabelText
      {
          get { return this.loginLabel.Text; }
          set { this.loginLabel.Text = value; }
      }
      
      
      ((YourMasterPageClass)Master).LoginLabelText = "Welcome!";