Как вы перенаправляете на страницу вызова в ASP.NET MVC? - PullRequest
9 голосов
/ 30 января 2009

Допустим, у меня есть действие контроллера, которое удаляет элемент из корзины покупок пользователя. Это действие контроллера запускается выполнением POST для URL ~ / delete / {id}. Если в моем приложении есть несколько страниц, которые будут публиковаться по этому URL-адресу, как мне создать действие контроллера для перенаправления обратно на страницу, на которой оно было опубликовано?

Ответы [ 6 ]

11 голосов
/ 06 ноября 2012

Вот что я делаю:

    public ActionResult ResendActivationEmail()
    {
        // Do other things here
        return new RedirectResult(Request.UrlReferrer.AbsoluteUri);
    }
11 голосов
/ 30 января 2009

Вы должны предоставить параметр RedirectToUrl со страницы публикации.

Использование заголовков реферера не является хорошей практикой.

Вместо этого сделайте что-то вроде этого:

public ActionResult Delete(int id, string RedirectToUrl)
{
  // check if RedirectToUrl is null or empty and redirect accordingly
}

В представлении проводки или частичном представлении вы можете предоставить параметр несколькими способами:

<%= Html.Hidden("RedirecToUrl","/my/lovely/url") %>

или

<form action="/item/delete/22?RedirectToUrl=/my/lovely/url">

Я бы предпочел первый вариант.

2 голосов
/ 30 января 2009

Первое, что я хотел бы сделать, это использовать Ajax.ActionLink, тогда, если у пользователя включен Javascript, вы фактически никогда не покинете страницу. Это лучшее решение. Если вы не хотите ссылку, вы также можете иметь форму Ajax. Любой из них может использовать метод DELETE или POST.

Чтобы обработать случай, когда Javascript отключен, когда вы обнаруживаете в контроллере, что POST не был выполнен с Ajax (Request.IsAjaxRequest имеет значение false), вы можете посмотреть на свойство Request.UrlReferer, чтобы получить Url ссылающейся страницы. Если это не нуль, вы можете использовать RedirectResult, чтобы вернуться на эту страницу. Если оно пустое, выберите целевую страницу по умолчанию - возможно, что-то вроде «Ваш товар был удален, нажмите здесь, чтобы продолжить покупки». Этот последний, вероятно, будет очень редко попадать под удар.

0 голосов
/ 12 июня 2009

Если вы используете WCSF (Фабрика программного обеспечения веб-клиента) для реализации шаблона MVC, вы можете использовать PageFlow для выполнения всей навигации.

Например: -

PageFlow.Next (); или PageFlow.Previous ();

0 голосов
/ 12 июня 2009

Просто используйте заголовок URL Referer [sic].

var requestFrom = Request.UrlReferrer

Документацию можно найти по адресу: http://msdn.microsoft.com/en-us/library/system.web.httprequest.urlreferrer.aspx

Единственный раз, когда это не сработает, это когда страница запрашивается напрямую, но в этом случае у вас не будет места для перенаправления в любом случае.

Существует также возможность выполнения единственной асинхронной операции с использованием AJAX, чтобы ваше действие «Удалить» выполняло только то, что оно описывает, и не несло ответственности за выполнение действий, выходящих за рамки предполагаемой цели удаления.

0 голосов
/ 30 января 2009

Я никогда не пробовал, но вы можете использовать заголовок Referer, чтобы узнать, откуда поступает сообщение или получить, и попытаться сопоставить URL с маршрутом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...