Как передать класс через RedirectToAction - PullRequest
2 голосов
/ 21 февраля 2012

У меня есть следующий код:

    public ActionResult Index()
    {
        AdminPreRegUploadModel model = new AdminPreRegUploadModel()
        {
            SuccessCount = successAddedCount,
            FailureCount = failedAddedCount,
            AddedFailure = addedFailure,
            AddedSuccess = addedSuccess
        };
        return RedirectToAction("PreRegExceUpload", new { model = model });
    }

    public ActionResult PreRegExceUpload(AdminPreRegUploadModel model)
    {
        return View(model);
    }

, но модель пуста, когда я устанавливаю точку останова на PreRegExcelUpload.Почему?

Ответы [ 3 ]

1 голос
/ 21 февраля 2012

Вместо использования объекта Session в ответе Евгения Левина я бы предложил использовать TempData.См. http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications о TempData.

Вы также можете исправить это, вызвав return PreRegExceUpload(model); вместо return RedirectToAction(..) в вашей Index функции.

1 голос
/ 21 февраля 2012

TempData - это просто «умная» оболочка для Session, под капотом она все еще действует так же.

Поскольку это всего 4 поля, я бы пропустил их через строку запроса.

Всегда старайтесь по возможности избегать сессии / временных данных, для которых в этом сценарии это, безусловно, так.

Вы уверены, что это ваш полный код?Как это не имеет смысла.

Если вы отправляете POST'ы некоторые данные и сохраняете их в базе данных (например), обычно вы перенаправляете на другое действие, передавая уникальный идентификатор (который обычно генерируется после сохранения), извлеките его обратно из БД и верните представление.

Это гораздо лучшая практика.

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

0 голосов
/ 21 февраля 2012

Использование сеанса для передачи модели в метод:

public ActionResult Index()
{
    AdminPreRegUploadModel model = new AdminPreRegUploadModel()
    {
        SuccessCount = successAddedCount,
        FailureCount = failedAddedCount,
        AddedFailure = addedFailure,
        AddedSuccess = addedSuccess
    };
    Session["someKey"] = model;
    return RedirectToAction("PreRegExceUpload");
}

public ActionResult PreRegExceUpload()
{
    var model = (AdminPreRegUploadModel) Session["someKey"];
    Session["someKey"] = null;
    return View(model);
}

Метод RedirectToAction () не может принимать не примитивные типы в качестве параметров, поскольку параметры URL-адреса являются строковыми.

...