繁体   English   中英

如何将子控件添加到标签控件?

[英]How to add child controls to Label control?

我正在ASP.NET网页上制作WebForms用户控件。 它应该根据登录或注销的用户来更改其内容。 单击登录表单的“提交”按钮后,该问题会在回发时发生。 LoggedInLabelVisible属性设置为true,并且标签的<span>标签显示在生成的HTML中,但是标签之间没有任何内容-没有子控件标记,也没有文本。

LogInControl.ascx

<asp:Label ID="LoggedInLabel" runat="server">
    Logged in as: <asp:Label ID="UserLoggedInName" runat="server" />
    - <asp:HyperLink ID="LogOutLink" runat="server">Log out</asp:HyperLink>
</asp:Label>

LogInControl.ascx.cs

protected void LogInButton_Click(object sender, EventArgs e)
{
    //(...)
    bool isUserLoggedIn = AuthHelper.isUserLoggedIn(Session);
    LoggedInLabel.Visible = isUserLoggedIn;
    LoggedOutLabel.Visible = !isUserLoggedIn;
    if (isUserLoggedIn)
    {
        UserLoggedInName.Text = AuthHelper.getUserLoggedIn(Session).ToString();
    }
    //(...)
}

从生成的HTML代码中(在LogInButton_Click处理程序之后):

<span id="LogInControl1_LoggedInLabel"></span>

使用调试器,我确认分别为LoggedInLabel.VisibleLoggedOutLabel.Visible分配了truefalse 我不明白为什么LoggedInLabel的内容没有出现在HTML代码中。 重新加载页面解决了该问题,即内容更改为:

<span id="LogInControl1_LoggedInLabel">
    Logged in as: <span id="LogInControl1_UserLoggedInName">login (Fname Lname)</span>
    - <a id="LogInControl1_LogOutLink">Log out</a></span>

我真的为此付出了很多,因此,我非常感谢您的帮助!

很难看到页面的其余代码,很难说,但我认为这是因为您有嵌套标签,而外部标签直到页面显示后才会刷新。

请记住,Label用作关联输入框(例如文本框或下拉菜单)的文本,因此此处未真正正确使用它。

尝试删除外部标签,将内部标签更改为Literal,然后将功能修改为如下所示:

<asp:Panel ID="LoggedInPanel" runat="server" visible="False">
    <asp:Literal ID="UserLoggedInName" runat="server" />
    - <asp:HyperLink ID="LogOutLink" runat="server">Log out</asp:HyperLink>
</asp:Label>

LoggedInPanel.Visible = isUserLoggedIn;    
if (isUserLoggedIn)
        {
            UserLoggedInName.Text = String.Format("Logged in as: {0}",AuthHelper.getUserLoggedIn(Session).ToString());
// Set the logout URL here.
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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