от
Используя ASP.NET в MVC есть ситуации (например, форма представления), что может потребовать
RedirectToAction
. Одним из таких является ситуация, когда возникают ошибки проверки после отправки формы и нужно перенаправить обратно в форму, но хотелось бы URL на URL-адрес в форме, а не страница действий, которые он представляет. Как мне потребовать от формы, содержащие изначально
POST
ed данных, для удобства пользователя, а также проверки целей, как я могу передать данные через
RedirectToAction()
? Если я использую параметр viewData, мой
POST
параметры будут изменены до
GET
параметров.

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.

6 Ответы

0 голосов
от
Используя ASP.NET в MVC есть ситуации (например, форма представления), что может потребовать
RedirectToAction
. Одним из таких является ситуация, когда возникают ошибки проверки после отправки формы и нужно перенаправить обратно в форму, но хотелось бы URL на URL-адрес в форме, а не страница действий, которые он представляет. Как мне потребовать от формы, содержащие изначально
POST
ed данных, для удобства пользователя, а также проверки целей, как я могу передать данные через
RedirectToAction()
? Если я использую параметр viewData, мой
POST
параметры будут изменены до
GET
параметров.
0 голосов
от
Решение заключается в использовании свойства данных tempdata, чтобы хранить нужные компоненты запросу. Например:
public ActionResult Send()
{
    TempData["form"] = Request.Form;
    return this.RedirectToAction(a =
0 голосов
от
Имейте в виду, что магазины данных tempdata форме в сессии. Если вам не нравится такое поведение, вы можете реализовать новый интерфейс ITempDataProvider и использовать какой-то другой механизм для хранения временных данных. Я не стал бы этого делать, если вы не знаете на самом деле (через измерения и профилирования), что использование состояния сеанса причиняет тебе боль.
0 голосов
от
Взгляните на MVCContrib, вы можете сделать это:
using MvcContrib.Filters;

[ModelStateToTempData]
public class MyController : Controller {
    //
    ...
}
0 голосов
от
Есть еще один способ, который позволяет избежать данных tempdata. Шаблон мне нравится, предполагает создание 1 действие для исходной визуализации и рендеринг недействительной форма. Что-то вроде этого:
var form = new FooForm();

if (request.UrlReferrer == request.Url)
{
     // Fill form with previous request's data
}

if (Request.IsPost())
{
     if (!form.IsValid)
     {
         ViewData["ValidationErrors"] = ...
     } else {
         // update model
         model.something = foo.something;
         // handoff to post update action
         return RedirectToAction("ModelUpdated", ... etc);
     }
}

// By default render 1 view until form is a valid post
ViewData["Form"] = form;
return View();
Вот картина более или менее. Немного pseudoy. При этом вы можете создать 1 вид для обработки рендеринга форме, повторно отображая значения (так как форма будет заполнена предыдущими значениями), и показывает сообщения об ошибках. Когда проводки к этому действию, если его действительное, он передает управление другому действию. Я пытаюсь сделать этот шаблон легко .чистый рамках проверки, как мы создаем поддержку для MVC.
0 голосов
от
Если вы хотите передать данные перенаправленные действия, способ вы могли бы использовать это:
return RedirectToAction("ModelUpdated", new {id = 1});
// The definition of the action method like  public ActionResult ModelUpdated(int id);
...