Перенаправление на действие в другом контроллере - PullRequest
7 голосов
/ 24 ноября 2008

Я хочу перенаправить с действия на одном контроллере на действие на втором контроллере. Обычно я бы использовал RedirectToAction ("actionName", "controllerName", объекты); Метод, на который я хочу перенаправить, имеет две перегрузки:

  • Один для HttpVerbs.Get, который используется для прямой ссылки
  • Один для HttpVerbs.Post принимает ссылочные типы, которые заполняются через привязку модели

Когда я выполняю перенаправление с помощью метода RedirectToAction, по умолчанию меня перенаправляют на метод GET, который, конечно, не соответствует моим параметрам.
Как я могу убедиться, что он перенаправляет на корректную перегрузку действия?

- EDIT -
По запросу некоторые более конкретные детали:
Действие, на которое я хочу перенаправить, заполняет viewData на основе параметров, а затем вызывает правильное представление.

public ActionResult OverView(SearchBag searchBag, IngredientBag ingredientBag) {

У него есть вторая версия для Gets, поэтому он может работать и по GET:

[AcceptVerbs(HttpVerbs.Get)]
public ActionResult OverView(int colorId, string paintCode, string name, int formulaId) {
    return OverView(new SearchBag() 
        { ColorId = colorId, PaintCode = paintCode, ColorName = name, FormulaId = formulaId }
            , formulaViewData.IngredientBag);
}

Тот, кого я сейчас вызываю, находится в другом контроллере. Он выполняет некоторые предварительные вычисления, извлекает необходимую информацию и затем делает то же самое, что и предыдущие действия. Я мог бы повторить код из первого действия, но я бы предпочел просто вызвать это действие.

[AcceptVerbs(HttpVerbs.Post)]
public RedirectToRouteResult ReCalculate(SearchBag searchBag, IngredientBag ingredientBag) {

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

Ответы [ 2 ]

3 голосов
/ 24 ноября 2008

Вы не можете использовать RedirectToAction (или что-либо еще), чтобы заставить браузер перенаправлять с HTTP POST. Возможно, вам удастся взломать его с помощью некоторого JavaScript, но это будет ужасно.

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

Я предполагаю, что вы хотите сохранить некоторые данные в TempData, вызвать RedirectToAction, загрузить из TempData в целевой Controller / Action и обработать.

Для получения дополнительной информации о TempData см. Эти вопросы; http://www.google.com/search?q=tempdata+site%3Astackoverflow.com

2 голосов
/ 09 октября 2010

Поскольку ваш объект заполнен, вы можете рассмотреть возможность возврата того же вида из первого действия вместо перенаправления.

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