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登录控件: LoginStatus
, LoginName
,…
"~/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");