Возврат к странице вызова в области с помощью UrlReferrer - PullRequest
1 голос
/ 10 декабря 2010

Я создал новый проект MVC2, используя веб-приложение ASP.NET MVC2, которое предоставляет мне веб-сайт по умолчанию.Я добавил простую область, в которой у меня был домашний контроллер и индексное представление.Это вызвало первую проблему с компилятором, давшим «найдено несколько типов, соответствующих имени контроллера« Home »».Я изменил Home на Main, и он скомпилирован.

Я добавил новую вкладку для ссылки на представление «Индекс» в своей области, открыл веб-сайт и начал щелкать вкладки.Когда я заходил на страницу указателя области, я не мог вернуться на страницу «Домой» или «О нас», не изменив меню, как показано ниже:

<ul id="menu">              
     <li><%= Html.ActionLink("SampleArea.Main", "Index", "Main", new { area = "SampleArea" }, null)%></li>
     <li><%= Html.ActionLink("Home", "Index", "Home", new { area = "" }, null)%></li>
     <li><%= Html.ActionLink("About", "About", "Home", new { area = "" }, null)%></li>
</ul>

После этого я мог бы правильно переключаться между вкладками.Затем я изменил код в представлении LogOff в контроллере учетной записи следующим образом:

public ActionResult LogOff()
{
    FormsService.SignOut();

    //return RedirectToAction("Index", "Home");
    return RedirectToAction(Request.UrlReferrer.AbsolutePath.ToString());
}

Я использую UrlReferrer.AbsolutePath, чтобы вернуться на страницу вызова, если пользователь выходит из системы.Если вызывающей страницей является представление в SampleArea, .AbsolutePath содержит «/ SampleArea».Это потому, что контроллер и представление являются значениями по умолчанию, и поэтому они не включены.По мере продолжения я получаю следующее сообщение об ошибке:

Ресурс не найден.
Описание: HTTP 404. Возможно, вы искали ресурс (или одну из его зависимостей)удален, изменилось его имя или временно недоступно.Пожалуйста, просмотрите следующий URL и убедитесь, что он написан правильно.

Запрошенный URL: / Account / SampleArea

Насколько я понимаю, / Account был добавлен, потому что это контроллер, в котором он находился, когда выполнялся LogOff.Он считает / SampleArea действием и поэтому добавил текущий контроллер для завершения маршрута.

Используя UrlReferrer.AbsolutePath, можно ли как-то указать SampleArea в качестве области или я могу что-то еще сделать, чтобы вернуться на правильную страницу?

Новое дополнение
Это даже страннее, чем я думал.Я открыл веб-сайт, который я сейчас разрабатываю, и изменил оператор return в представлении LogOut, чтобы он возвращался с использованием AbsolutePath.Точка останова показывает, что она содержит «/ Club / PrivacyPolicy».Тем не менее, я получаю то же сообщение об ошибке со следующим отличием:

Запрошенный URL: / Login / Club / PrivacyPolicy

С какой стати он должен префикс его / Loginкоторый является View, а не / Account, который является контроллером?На самом деле, зачем ему вообще ставить перед ним префикс?/ Club / PrivacyPolicy - действительный маршрут в Global.asax.cs.

1 Ответ

0 голосов
/ 20 декабря 2010

Я наконец-то понял, как вернуться на страницу, на которой вы находились, когда вызывали запрос LogOn или LogOut.Я использовал следующий фрагмент кода.

Html.ActionLink("Member LogOn", "LogOn", "Account", new { area = "", returnUrl = HttpContext.Current.Request.RawUrl }, null)

Это генерирует, например,

<a href='/LogIn/LogOn?returnUrl=%2FContactUs'>Member LogOn</a>

.

В моем логине HttpPost ActionResult у меня появляется

if (!String.IsNullOrEmpty(returnUrl))
{
    return Redirect(returnUrl);
}
    else
{
    return RedirectToAction("Index", "Home");
}

Иногда я нахожу, что мне просто нужен HttpContext.Request.RawUrl.

Я не совсем уверен, почемусгенерировал / LogIn / LogOn вместо / Account / LogOn, но работает как положено.

...