Response.Redirect () для перенаправления на страницу в подпапке - PullRequest
3 голосов
/ 18 декабря 2011

Я использую 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");
            }
        }
    }    
}

и еще одна вещь, и страница по умолчанию, и страница входа в систему, используют одну и ту же главную страницу.

Ответы [ 5 ]

6 голосов
/ 18 декабря 2011

Ваша проблема в том, что вы делаете перенаправление с 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: LoginStatus, LoginName, ...

5 голосов
/ 18 декабря 2011
"~/Account/Login.aspx"

даст

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

, поэтому, если корень вашего приложения

http://localhost/BuzzEnhance

, относительный путь будет расширен до

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

Также, если вы используете проверку подлинности с помощью форм, вы можете использовать

FormsAuthentication.RedirectToLoginPage();

см. MSDN .

2 голосов
/ 18 декабря 2011

Прежде всего, это не responce.redirect("page.aspx");

его Response.Redirect("Page.aspx");

Попробуйте, таким образом, это будет работать. По вашему вопросу Response.Redirect("folder/page.aspx"); попробуйте сейчас, я буду ждать.

Имейте в виду, что в C # первая буква должна быть заглавной.

1 голос
/ 18 декабря 2011

Что вам нужно, это:

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

Это перейдет к Account, который находится внутри корня и там к Login.aspx странице.

0 голосов
/ 06 октября 2015

попробуйте

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