Response.Redirect()重定向到子文件夹中的页面

我正在使用Response.Redirect("login.aspx");

自从我将login.aspx移动到我的Account子文件夹后,我尝试了以下代码,但它不起作用。

 Response.Redirect("Account/login.aspx"); 

尝试重定向到此URL:

 http://localhost/BuzzEnhance/Account/Login.aspx 

完整的代码是:

 public partial class BuzzMaster : MasterPage { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (Session["Username"] != null) { username.Text = Session["Username"].ToString(); } else { Response.Redirect("Account/Login.aspx"); } } } } 

还有一件事,默认页面和登录页面都使用相同的母版页。

您的问题是您正在从MasterPage进行重定向,并使用相对路径。

使用相对路径时,它将相对于绑定到母版页的内容页的位置, 而不是相对于母版页的位置。

您的重定向到:

 /BuzzEnhance/Account/Account/Login.aspx 

几乎可以肯定来自绑定到母版页的Account文件夹中的内容页面。 例如,如果您的登录页面(/BuzzEnhance/Account/Login.aspx)本身绑定到该主页面,它将重定向到相对路径Account/Login.aspx ,它将解析为/BuzzEnhance/Account/Account/Login.aspx ,正是你所看到的。

最好的解决方案是@abatishchev的答案 – 使用相对于应用程序root的路径~/Account/Login.aspx

但是,如果我怀疑您的Login.aspx页面绑定到同一个母版页,那么这将给您带来另一个问题。 每次访问Login.aspx时,它都会在主页面中执行重定向代码,导致无限循环,直到超时。

一种解决方案是避免将Login.aspx页面绑定到该Master页面,或添加一些条件代码,以便在Login.aspx页面上不重定向。

虽然更好,但如果您使用表单身份validation并且让它以标准方式管理重定向到登录页面,则根本不需要进行重定向。 如果要显示用户名,可以使用HttpContext.Current.User.Identity.Name – 或使用其中一个ASP.NET登录控件: LoginStatusLoginName ,…

 "~/Account/Login.aspx" 

会给

 "/Account/Login.aspx" 

所以如果您的应用程序的根目录是

 http://localhost/BuzzEnhance 

给定的相对路径将扩展为

 http://localhost/BuzzEnhance/Account/Login.aspx 

此外,如果您使用的是表单身份validation,则可能需要使用

 FormsAuthentication.RedirectToLoginPage(); 

见MSDN 。

首先它不是responce.redirect("page.aspx");

它的Response.Redirect("Page.aspx");

试试这种方式它会起作用。 根据你的问题,它的Response.Redirect("folder/page.aspx"); 现在试试,我会等。

请记住,C#首字母应该大写。

你需要的是这个:

 Response.Redirect("/Account/Login.aspx"); 

这将转到位于根目录内并位于Login.aspx页面中的Account

试试这个

 Response.Redirect(this.ResolveClientUrl("~/Account/Login.aspx");