1

我有一个索引页面作为内容页面,在它的顶部我有一个像这样的内容占位符。

    <asp:Content ID="Content3" ContentPlaceHolderID="logProcessHolder" runat="server">
        <p class="header-link"><a href="LoginFormContainer.aspx">login</a>&nbsp;or&nbsp;<a href="RegisterFormContainer.aspx">create an account</a></p>
    </asp:Content>

我想在用户登录时更改其内容。登录后,我想输入用户名而不是这些链接。我已经有了我的登录方法,只是想知道如何在不使用另一个内容页面的情况下做到这一点?还是对我来说这是一个合乎逻辑的解决方案?我应该使用另一个内容页面作为主页吗?

4

3 回答 3

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 中

希望这有用!!

于 2014-05-28T00:05:35.347 回答
2

我会将您的选项包装在asp:Panels 中或像epaezr 那样LoginView使用控件

<asp:Content ID="Content3" ContentPlaceHolderID="logProcessHolder" runat="server">
   <asp:Panel ID="pnlAnonymous" runat="server">
    <p class="header-link"><a href="LoginFormContainer.aspx">login</a>&nbsp;or&nbsp;<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

于 2014-05-28T00:31:41.333 回答
1

您的问题有一些解决方法取决于您的登录方法,如果您使用的是 ASP.NET Forms 身份验证,那么您可以显示您的用户名,如下所示:

   <%: 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>&nbsp;&nbsp;
         <a href="Logout.aspx">logout</a>
    <%} else { %>
         <a href="LoginFormContainer.aspx">login</a>&nbsp;or&nbsp;
         <a href="RegisterFormContainer.aspx">create an account</a>
    <%} %>  
   </p> 
  </asp:Content>

或者,如果您有自己的身份验证方法,而不是 Context.User.Identity.IsAuthenticated您可以从数据库中检查用户的身份验证,并将其通过后面代码中的属性传递。

于 2014-05-28T00:04:34.480 回答