c# - это - передача данных из контроллера в представление




Как RedirectToAction в ASP.NET MVC без потери данных запроса (4)

При использовании ASP.NET MVC существуют ситуации (например, отправка формы), которые могут потребовать RedirectToAction .

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

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


Взгляните на MVCContrib , вы можете сделать это:

using MvcContrib.Filters;

[ModelStateToTempData]
public class MyController : Controller {
    //
    ...
}

Если вы хотите передать данные в перенаправленное действие, вы можете использовать метод:

return RedirectToAction("ModelUpdated", new {id = 1});
// The definition of the action method like  public ActionResult ModelUpdated(int id);

Помните, что TempData хранит коллекцию форм в сеансе. Если вам не нравится это поведение, вы можете реализовать новый интерфейс ITempDataProvider и использовать какой-то другой механизм для хранения временных данных. Я бы не стал этого делать, если бы вы не знали (с помощью измерения и профилирования), что использование состояния сеанса вредит вам.


Решение состоит в том, чтобы использовать свойство TempData для хранения требуемых компонентов запроса.

Например:

public ActionResult Send()
{
    TempData["form"] = Request.Form;
    return this.RedirectToAction(a => a.Form());
}

Тогда в вашем действии «Форма» вы можете перейти:

public ActionResult Form()
{
    /* Declare viewData etc. */

    if (TempData["form"] != null)
    {
        /* Cast TempData["form"] to 
        System.Collections.Specialized.NameValueCollection 
        and use it */
    }

    return View("Form", viewData);
}




asp.net-mvc