动态更改ContentPlaceHolder的内容

时间:2014-05-27 23:42:17

标签: c# asp.net master-pages content-pages

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

    <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>

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

3 个答案:

答案 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>&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

更改可见性

答案 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>&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,则可以从数据库中检查用户的身份验证,并通过代码中的属性传递它。