2011-12-18 103 views
2

我使用的是​​的Response.Redirect()重定向到一个页面中的子文件夹

自从我搬到我login.aspxAccount子文件夹中,我尝试下面的代码,但它不工作。

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

这个设法重新指向这个网址:

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"); 
      } 
     } 
    }  
} 

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

+3

-1甚至没有试图邮寄可读的问题。 – 2011-12-18 11:58:12

+0

至少粘贴没有拼写错误的代码(英文错误是可以接受的,但是你发布的每个地方都有'响应'的错误,并且你发布的URL和重定向行不匹配) – Mat 2011-12-18 11:59:54

+0

编辑..我需要从根文件夹到子文件夹名称Accont和一个名为login.aspx的页面..如何 – user614946 2011-12-18 12:00:22

回答

4

你的问题是你正在做一个MasterPage的重定向,并使用相对路径。

当您使用相对路径时,它将相对于绑定到主页面的内容页面的位置,相对于主页面的位置而言是而不是

您重定向到:

/BuzzEnhance/Account/Account/Login.aspx 

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

最好的解决方案是在@abatishchev的答案中 - 使用相对于应用程序根目录~/Account/Login.aspx的路径。

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

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

虽然更好,但如果您使用表单身份验证并使其以标准方式管理重定向到登录页面,则根本无需执行重定向。如果你想显示的用户名,你可以使用HttpContext.Current.User.Identity.Name - 或使用ASP.NET登录控件之一:LoginStatusLoginName,...

+0

谢谢,刚刚清除了我的想法,谢谢..我会这样做,并在这里更新你... – user614946 2011-12-18 12:56:48

2

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

Response.Redirect("Page.aspx");

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

请记住在C#中的第一个字母应该大写。

+0

做了那个家伙什么都没有......编辑我的帖子为sry的错字错误.. – user614946 2011-12-18 12:04:01

+0

其大写...但没有... – user614946 2011-12-18 12:05:27

+0

问题是页面的代码已经在不同的子文件夹内,称为“BuzzEnhance”所以相对路径是相对于该位置。 – 2011-12-18 12:12:07

1

你需要的是这样的:

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

这将去驻留在根里,并在那里以Login.aspxAccount

+0

没有运气,它给了我http:// localhost:10773 /帐户/ Login.aspx但我需要的是http: //localhost:10773/BuzzEnhance/Account/Login.aspx – user614946 2011-12-18 12:15:16

+0

行,看看[这个答案](http://stackoverflow.com/a/8551633/447356) – 2011-12-18 12:17:29

5
"~/Account/Login.aspx" 

会给

"<app root>/Account/Login.aspx" 

所以如果你的应用程序的根是

http://localhost/BuzzEnhance 

中给出。将扩大的相对路径

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

此外,如果你正在使用窗体身份验证,您可能需要使用

FormsAuthentication.RedirectToLoginPage(); 

看到MSDN

+0

+1,忘了那个魔法角色! – 2011-12-18 12:17:03

+0

@ShadowWizard它仍然HTTP错误400 - 错误的请求。 – user614946 2011-12-18 12:19:51

+0

@ user614946:请注意,我已将端口号删除为不重要。 – abatishchev 2011-12-18 12:23:06

0

试试这个

Response.Redirect(this.ResolveClientUrl("~/Account/Login.aspx"); 
相关问题