【问题标题】:Changing controls in Master Page in ASP.NET在 ASP.NET 中更改母版页中的控件
【发布时间】:2011-08-22 16:09:17
【问题描述】:
我正在设计一个使用母版页的网站。
我有一个登录文本框和一个用户可以用来登录的标签。这些控件在我的母版页上。
但是,即使用户登录了文本框,并且要求输入电子邮件 ID 和密码的标签显示在下一页,我在成功登录后重定向。
在一个用户之后,我想隐藏登录标签和文本框,而是显示一条欢迎用户消息。
但我无法在我重定向的下一页进行编辑。我该如何隐藏它?
【问题讨论】:
标签:
c#
asp.net
master-pages
【解决方案1】:
如果您使用FormsAuthentication,您可以使用LoginView根据用户的登录状态显示控件。
<asp:LoginView ID="LoginViewTemplate" runat="server">
<LoggedInTemplate>
// Welcome message goes here
</LoggedInTemplate>
<AnonymousTemplate>
// Textboxes and other login stuff goes here
</AnonymousTemplate>
</asp:LoginView>
【解决方案2】:
母版页中不应有登录文本框。
如果出于某种原因,我建议您为登录页面和登录页面设置不同的母版页。
【解决方案3】:
如果您只想隐藏它,请将控件放在面板控件中,然后如果用户已登录,则在页面加载时隐藏面板。
所以当用户登录时,使用登录按钮,为他们的用户 ID 设置一个会话变量,如下所示:
Session("UserID") = <some formula to get number>
然后在母版页的pageload代码部分写:
If not Session("UserID") is nothing then
pnlLogin.Visible = False
End If
但是有更好的控件,以及更正确的方法来执行此类操作,例如登录控件,因此不推荐使用此方法。
【解决方案4】:
这里的解决方案通常是使用模板化控件;这意味着,根据状态,可以显示适当的模板和控件。
在这种情况下,已经存在LoginView 控件,它为未经身份验证和经过身份验证的用户公开了两个模板。默认情况下,if 会显示登录模板,然后,当通过身份验证并重新加载页面时,将显示另一个模板,允许您使用 LoginName 控件显示登录用户名。
考虑到您已经走到了这一步,所提供的链接应该会为您提供启动和运行所需的所有信息!但是,这是文章中的 sn-p,显示了相关的标记和可用的属性/事件等:
<asp:LoginView
EnableTheming="True|False"
EnableViewState="True|False"
ID="string"
OnDataBinding="DataBinding event handler"
OnDisposed="Disposed event handler"
OnInit="Init event handler"
OnLoad="Load event handler"
OnPreRender="PreRender event handler"
OnUnload="Unload event handler"
OnViewChanged="ViewChanged event handler"
OnViewChanging="ViewChanging event handler"
runat="server"
SkinID="string"
Visible="True|False">
<AnonymousTemplate>
<!-- child controls -->
</AnonymousTemplate>
<LoggedInTemplate>
<!-- child controls -->
</LoggedInTemplate>
<RoleGroups>
<asp:RoleGroup
Roles="string">
<ContentTemplate>
<!-- child controls -->
</ContentTemplate>
</asp:RoleGroup>
</RoleGroups>
</asp:LoginView>
如您所见,此控件提供了足够的抽象来与您自己的身份验证方法保持一致,因为 ASP.NET 有许多选项可供选择。