Передача объекта ViewModel из ActionMethod в другой - PullRequest
0 голосов
/ 01 мая 2011

У меня есть форма регистрации на боковой панели моего веб-приложения. Когда пользователь отправляет введенные данные, его следует перенаправить на другую страницу с более полной регистрационной формой, когда он сможет заполнить оставшиеся данные. Данные, которые были введены пользователем в первой форме, должны быть уже во второй форме, но этого не происходит ... Я проверил значение модели представления, которое я передаю второму методу действия, и это было null и в адресной строке браузера я получаю:

http://localhost:2732/User/RegisterPage?model=Sharwe.MVC.ViewModels.RegisterPageViewModel

Вот код:

    public ActionResult Register()
    {
        return PartialView(new RegisterViewModel());
    }

    [HttpPost]
    public ActionResult Register(RegisterViewModel dto)
    {
        var model = Mapper.Map<RegisterViewModel, RegisterPageViewModel>(dto);
        return RedirectToAction("RegisterPage", "User", new { viewModel = model });
    }

    public ActionResult RegisterPage(RegisterPageViewModel viewModel)
    {
        return View(viewModel);
    }

Разве это не способ сделать это? Или я что-то здесь упускаю ...?

Ответы [ 2 ]

3 голосов
/ 01 мая 2011

Словарь, передаваемый в RedirectToAction (), является значением маршрута, а не моделью представления.И RedirectToAction () в основном говорит браузеру перейти на определенный URL.Браузер по умолчанию делает запрос GET и, очевидно, вы теряете свои данные.

Для этого вам нужно использовать словарь TempData.Вы можете сохранить модель представления в TempData, а затем RedirectToAction () в RegisterPage.TempData сохраняет данные только для 1 диапазона запроса и автоматически удаляет их.Он идеально подходит для этого сценария.

Подробнее см.> Значение объекта внутри модели представления, потерянное при перенаправлении на действие в asp.net mvc 2.0?

1 голос
/ 01 мая 2011

В данном конкретном случае вам не нужно использовать RedirectToAction, вы можете просто вызвать действие RegisterPage напрямую:

[HttpPost]
public ActionResult Register(RegisterViewModel dto)
{
    var model = Mapper.Map<RegisterViewModel, RegisterPageViewModel>(dto);
    return RegisterPage(model);
}

public ActionResult RegisterPage(RegisterPageViewModel viewModel)
{
    return View(viewModel);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...