我有一个索引页面作为内容页面,在它的顶部我有一个像这样的内容占位符。
<asp:Content ID="Content3" ContentPlaceHolderID="logProcessHolder" runat="server">
<p class="header-link"><a href="LoginFormContainer.aspx">login</a> or <a href="RegisterFormContainer.aspx">create an account</a></p>
</asp:Content>
我想在用户登录时更改其内容。登录后我想放置用户名而不是这些链接。我已经有了登录方法,只想知道如何在不使用其他内容页面的情况下实现这一目标?或者这对我来说是合乎逻辑的解决方案?我应该使用另一个内容页面作为主页吗?
答案 0 :(得分:2)
您可以使用代码上的集成登录控件,将它们放在contentplaceholder上并自定义以显示用户名...
所以你放置一个asp:LoginView,在它的AnonymousTemplate上你可以放置一个asp:Login控件并自定义它,在LoggedInTemplate上你可以放置登录名,注销链接,更改密码等。
以下是一个例子:
<asp:LoginView ID="LoginView1" runat="server">
<AnonymousTemplate>
<asp:Login ID="Login1" runat="server"></asp:Login>
</AnonymousTemplate>
<LoggedInTemplate>
<asp:LoginName ID="LoginName1" runat="server" /> | <asp:LoginStatus ID="LoginStatus1" runat="server" LogoutAction="RedirectToLoginPage" LogoutText="End session" />
</LoggedInTemplate>
</asp:LoginView>
该代码应该放在ContentPlaceHolder
中希望这很有用!!
答案 1 :(得分:2)
我会将您的选项包装在asp:Panel
中,或将LoginView
控件用作epaezr has done
<asp:Content ID="Content3" ContentPlaceHolderID="logProcessHolder" runat="server">
<asp:Panel ID="pnlAnonymous" runat="server">
<p class="header-link"><a href="LoginFormContainer.aspx">login</a> or <a href="RegisterFormContainer.aspx">create an account</a></p>
</asp:Panel>
<asp:Panel ID="pnlVerified" runat="server">
<asp:Literal ID="litUserName" runat="server" />
</asp:Panel>
</asp:Content>
然后在你的代码中
protected void Page_Load(object sender, EventArgs e)
{
if (Request.IsAuthenticated)
{
pnlAnonymous.Visible = false;
pnlVerified.Visible = true;
litUserName.Text = Context.User.Identity.Name;
}
else
{
pnlAnonymous.Visible = true;
pnlVerified.Visible = false;
}
}
您不必使用面板。您还可以使用HTML元素并通过为其提供ID和runat="server"
属性来在代码隐藏中访问它们。例如:<p ID="loginLinks" runat="server" class="header-link">...etc...</p>
您可以使用loginLinks.Visible
答案 2 :(得分:1)
您的问题有一些方法取决于您的登录方法, 如果您使用的是ASP.NET Forms Authentication,那么您可以显示您的用户名,如下所示:
如果用户未经过身份验证,如果您想拥有这些链接,那么您可以在当前内容占位符中包含这样的内容:<%: Context.User.Identity.Name %>
<asp:Content ID="Content3" ContentPlaceHolderID="logProcessHolder" runat="server"> > <p class="header-link"> <% if(Context.User.Identity.IsAuthenticated){ %> <div><%: Context.User.Identity.Name %></div> <a href="Logout.aspx">logout</a> <%} else { %> <a href="LoginFormContainer.aspx">login</a> or <a href="RegisterFormContainer.aspx">create an account</a> <%} %> </p> </asp:Content>
或者,如果您拥有自己的身份验证方法而不是Context.User.Identity.IsAuthenticated
,则可以从数据库中检查用户的身份验证,并通过代码中的属性传递它。