C# 在ASP.NET页面中选择标题

C# 在ASP.NET页面中选择标题,c#,asp.net,master-pages,C#,Asp.net,Master Pages,我创建了一个母版页(Site.master),其中包含显示页眉、页脚和侧栏的代码。它工作得非常好,但是我很难弄清楚如何动态地选择标题 基本上,有两种可能的标题选项。如果用户没有登录,我希望他们看到一个登录框和恢复密码的链接,等等。如果他们登录,他们将看到一个注销链接,以及关于他们帐户的一些信息(实际上类似于如何工作) 是否可以让Site.master检查并根据用户的登录状态使用我想要的标题?我很想知道从哪里开始(我想可能会在母版页后面的代码中进行一些检查),因此任何帮助都将不胜感激。是的,将两个

我创建了一个母版页(Site.master),其中包含显示页眉、页脚和侧栏的代码。它工作得非常好,但是我很难弄清楚如何动态地选择标题

基本上,有两种可能的标题选项。如果用户没有登录,我希望他们看到一个登录框和恢复密码的链接,等等。如果他们登录,他们将看到一个注销链接,以及关于他们帐户的一些信息(实际上类似于如何工作)


是否可以让Site.master检查并根据用户的登录状态使用我想要的标题?我很想知道从哪里开始(我想可能会在母版页后面的代码中进行一些检查),因此任何帮助都将不胜感激。

是的,将两个可能的标题放在它们自己的面板控件中,然后在
页面加载中只需说以下内容即可:

if ( Request.IsAuthenticated )
{
    // Display
    pnlAuthenticated.Visible = true;
    pnlGuest.Visible = false;
} 
else 
{
    // Display
    pnlAuthenticated.Visible = false;
    pnlGuest.Visible = true;
}

是的,有两种方法;将标题嵌入面板中,并根据登录状态(在代码中出现)显示/隐藏面板。或者,您可以使用两个母版页,并在OnPreInit方法(或PreInit事件处理程序)中执行此检查,然后切换以显示要使用的母版页(您只能在此事件处理程序中以编程方式更改母版页)

第二个选项的问题是HttpContext.Current.user在PreInit中可能不可用


HTH.

我个人会将每组标题控件放入两个不同的占位符中,默认情况下将两者都设置为不可见

然后在母版页中添加一些代码

PlaceHolder1.Visible = Context.User.IsAuthenticated
PlaceHolder2.Visible = !Context.User.IsAuthenticated

您应该考虑使用内置控件,<代码> Login VIEW/COD>()。它专门为经过身份验证和匿名的用户提供多个模板(视图)

这是一种最佳做法。您可以使用适当的登录/注销按钮、用户信息等为登录用户和匿名用户定义页眉/页脚等

下面是一个非常基本的示例:

<asp:LoginView id="LoginView1" runat="server">
    <AnonymousTemplate>
        <asp:HyperLink ID="lnkLogin" runat="server" NavigateUrl="~/Login.aspx" Text="Login"/>
    </AnonymousTemplate>
    <LoggedInTemplate>
        You are logged in as: <asp:LoginName id="lnCurrentUser" runat="server" />.
    </LoggedInTemplate>
</asp:LoginView>

这将不起作用,因为在回发时,用户可能不再经过身份验证,它仍然会向他们显示经过身份验证的用户的内容。你每次都需要按照我的例子隐式地处理它。我已经修改了我的例子,使其更加简洁和准确。注意,使用面板会在子控件周围添加标签,这可能会干扰CSS。占位符在这方面更精简,因为它们只呈现子控件。但是,您的解决方案会很好地工作。没有必要自己编写代码。
LoginView
控件通过设计处理此问题,并提供了一种简单的声明性方法。回答非常好,谢谢!但是(我继承了这个站点),我猜站点处理身份验证的方式可能有问题,因为控件似乎总是建议用户登录。你能建议我在哪里读到关于如何在ASP.NET中对站点进行正确身份验证的内容吗?我真的认为现在做得不对。很高兴这有帮助。就ASP.NET身份验证而言,两种最常见的内置方式是(1)windows或(2)表单身份验证。除非您能够根据Active Directory设置对用户进行身份验证,否则请使用表单身份验证。这里有一个描述:。这篇文章也不错,虽然有点老:基本上,在web.config中,您指定使用表单身份验证,然后拒绝根文件夹或子文件夹中的匿名用户(同样使用web.config)。下一步是实现一个非常简单的成员资格提供程序,asp.net将寻找该提供程序,用于用户登录等。上面的文章对这一点的解释比我所能做的要详细得多。。。