如何将子控件添加到Label控件?

时间:2014-01-15 02:20:32

标签: c# asp.net user-controls webforms

我在ASP.NET网页上进行WebForms用户控件。它应根据登录或注销的用户更改其内容。 单击登录表单的提交按钮后,在回发时会出现问题。 Visible的{​​{1}}属性设置为true,标签的LoggedInLabel标签出现在生成的HTML中,但标签之间没有任何内容 - 没有孩子控制标记,没有文字。

来自<span>

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

从生成的HTML代码(调用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(); } //(...) } 处理程序后):

LogInButton_Click

使用调试器,我确认<span id="LogInControl1_LoggedInLabel"></span> LoggedInLabel.Visible分别分配了LoggedOutLabel.Visibletrue。我不明白为什么false的内容不会出现在HTML代码中。重新加载页面可以解决问题,即内容更改为:

LoggedInLabel

我真的把头发拉过来,所以我真的很感激你的帮助!

1 个答案:

答案 0 :(得分:0)

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

请记住,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.
        }