我在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.Visible
和true
。我不明白为什么false
的内容不会出现在HTML代码中。重新加载页面可以解决问题,即内容更改为:
LoggedInLabel
我真的把头发拉过来,所以我真的很感激你的帮助!
答案 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.
}