我使用默认模板在Visual Studio 2012中创建了一个项目。我希望每个用户都能够登录并重定向到不同的页面。我已经实现了第一次用户登录的代码。但是,如果我注销,然后使用其他用户登录,则该用户不会被重定向。当我调试应用程序时,在第二次登录时,它在用户名上显示为空白。我已将代码放在page_load事件中,是否有更好的事件或更好的方法来实现此代码?
var Username = Page.User.Identity.Name;
if (Username == "You" || Username == "you")
{
Response.Redirect("~/you.aspx");
}
else if (Username == "Me" || Username == "me")
{
Response.Redirect("~/me.aspx");
}
else if (Username == "Them" || Username == "them")
{
Response.Redirect("~/Them.aspx");
}
我也尝试过这个代码,但是一旦用户登录就没有重定向。在我看来,代码的aspx部分在@ login之后没有被触发:
代码背后:
public partial class Login : Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void LoggedIn(object sender, EventArgs e)
{
//This is redirect the user to their page
switch (Page.User.Identity.Name.ToLower())
{
case "me":
Response.Redirect("~/me.aspx");
break;
case "you":
Response.Redirect("~/you.aspx");
break;
case "them":
Response.Redirect("~/them.aspx");
break;
}
}
protected void Unnamed6_Click(object sender, EventArgs e)
{
}
}
Aspx Code Here:
<%@ Page Title="Log in" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Login.aspx.cs" Inherits="ChoresLists.Account.Login" %>
<%@ Register Src="~/Account/OpenAuthProviders.ascx" TagPrefix="uc" TagName="OpenAuthProviders" %>
<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
<hgroup class="title">
<h1><%: Title %>.</h1>
</hgroup>
<section id="loginForm">
<h2>Use a local account to log in.</h2>
<asp:Login runat="server" ViewStateMode="Disabled" RenderOuterTable="false" OnLoggedIn="LoggedIn">
<LayoutTemplate>
<p class="validation-summary-errors">
<asp:Literal runat="server" ID="FailureText" />
</p>
<fieldset>
<legend>Log in Form</legend>
<ol>
<li>
<asp:Label runat="server" AssociatedControlID="UserName">User name</asp:Label>
<asp:TextBox runat="server" ID="UserName" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="UserName" CssClass="field-validation-error" ErrorMessage="The user name field is required." />
</li>
<li>
<asp:Label runat="server" AssociatedControlID="Password">Password</asp:Label>
<asp:TextBox runat="server" ID="Password" TextMode="Password" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="Password" CssClass="field-validation-error" ErrorMessage="The password field is required." />
</li>
<li>
<asp:CheckBox runat="server" ID="RememberMe" />
<asp:Label runat="server" AssociatedControlID="RememberMe" CssClass="checkbox">Remember me?</asp:Label>
</li>
</ol>
<asp:Button runat="server" CommandName="Login" Text="Log in" OnClick="Unnamed6_Click" />
</fieldset>
</LayoutTemplate>
</asp:Login>
<p>
<%--<asp:HyperLink runat="server" ID="RegisterHyperLink" ViewStateMode="Disabled">Register</asp:HyperLink>
if you don't have an account.--%>
</p>
</section>
<section id="socialLoginForm">
<%--<h2>Use another service to log in.</h2>
<uc:OpenAuthProviders runat="server" ID="OpenAuthLogin" />--%>
<asp:Image ID="LoginImage" runat="server" ImageUrl="~/Images/102_0273.png" Width="450px" />
</section>
</asp:Content>
答案 0 :(得分:0)
嘿嘿嘿你为什么使用:
if (Username == "You" || Username == "you")
{
Response.Redirect("~/you.aspx");
}
if (Username == "Me" || Username == "me")
{
Response.Redirect("~/me.aspx");
}
if (Username == "Them" || Username == "them")
{
Response.Redirect("~/Them.aspx");
}
而不是使用:
if (Username == "You" || Username == "you")
{
Response.Redirect("~/you.aspx");
}
else if (Username == "Me" || Username == "me")
{
Response.Redirect("~/me.aspx");
}
else if (Username == "Them" || Username == "them")
{
Response.Redirect("~/Them.aspx");
}
答案 1 :(得分:0)
由于IIS中的URL通常不区分大小写,因此您可以使用它:
Response.Redirect(String.Format(“〜/ {0} .aspx”,Page.User.Identity.Name));
至于为什么第二次登录不是重定向,我们需要有关页面生命周期的更多信息,以及是否正在执行if(Page.IsPostBack)检查等操作。当您的第二个用户登录时,您是否还在使用此代码?
您可能应该处理Login控件的LoggedIn事件,而不是将其放在Page_Load中。像这样:
标记:
<asp:Login id="Login1" runat="server" OnLoggedIn="LoggedIn"></asp:Login>
代码:
protected void LoggedIn(object sender, EventArgs e)
{
Response.Redirect(String.Format("~/{0}.aspx", Page.User.Identity.Name));
}
答案 2 :(得分:0)
你能做的就是这样的事情
将OnLoggedIn事件添加到您的asp:登录页面
<asp:Login OnLoggedIn="LoggedOn" .../>
然后有这样的方法
protected void LoggedOn(object sender, EventArgs e)
{
switch (Page.User.Identity.Name.ToLower())
{
case "you":
Response.Redirect("~you.aspx");
break;
case "me":
Response.Redirect("~me.aspx");
break;
case "them":
Response.Redirect("~them.aspx");
break;
default:
Response.Redirect("Somewhere.aspx");
break;
}
}
答案 3 :(得分:0)
我终于找到了我需要做的事情。我根本不需要更改登录表单。我唯一需要做的就是在Web.Config文件中注释掉这一行:
<forms loginUrl="~/Account/Login" timeout="2880" defaultUrl="~/"/>
现在我的登录工作正常。