从服务器代码向主页添加HtmlGenericControl

时间:2014-12-02 16:16:27

标签: asp.net

我正在创建一个允许用户登录的网站。成功登录后,应在每个页面上显示用户名,例如,在右上角。我在Master Page上有一个ContentPlaceHolder。然后会创建一个h3标记并将其添加到此ContentPlaceHolder中。

母版页:

<asp:ContentPlaceHolder runat="server" ID="UserNamePlaceHolder">
</asp:ContentPlaceHolder>

登录页面:

<%@ MasterType VirtualPath="~/Master" %>

登录类:

protected void Login_LoggedIn(object sender, EventArgs e)
{
    ContentPlaceHolder userNamePlaceHolder = 
        (ContentPlaceHolder)Master.FindControl("UserNamePlaceHolder");
    var h3 = new HtmlGenericControl("h3");
    h3.InnerHtml = login.UserName;
    userNamePlaceHolder.Controls.Add(h3);
}

我一步一步做了调试。没有出错:没有null或空值,每个变量都被创建。但是,根本没有显示用户名。有没有人有想法?

1 个答案:

答案 0 :(得分:0)

更清晰,更好的方法是在母版页面上创建公共属性:

public string UserName
{
  get
  {
    return Literal1.Text;
  }
  set
  {
    Literal1.Text = value;
  }
}

它将标识Literal1的文字放在母版页上的任何位置:

<asp:Literal runat="server" ID="Literal1" />

您已经为强类型Master类添加了Master指令,所以现在您的登录类看起来像这样:

protected void Login_LoggedIn(object sender, EventArgs e)
{
    Master.UserName = login.UserName;
    userNamePlaceHolder.Controls.Add(h3);
}

希望这有帮助。