Я создал новый проект 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.