我的网络应用程序的侧栏中有一个注册表单。当用户提交输入的数据时,应该将用户重新定向到具有更完整的注册表单的另一页面,此时他可以填充其余数据。用户以第一种形式输入的数据应该已经存在于第二种形式,但是没有发生...我检查了视图模型的值我传递给第二种操作方法它是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);
}
这不是这样做的方法吗?或者我在这里遗漏了什么......?
答案 0 :(得分:3)
传递给RedirectToAction()的词典是路径值而不是视图模型。而RedirectToAction()基本上是告诉浏览器转到某个URL。默认情况下,浏览器会发出GET请求,显然您会丢失数据。
为此,您需要使用TempData字典。您可以将视图模型存储在TempData中,然后将RedirectToAction()存储到RegisterPage。 TempData仅保存1个请求范围的数据,并自动将其删除。这是这种情况的理想选择。
有关详细信息,请参阅此处&gt; The value for a object inside a viewmodel lost on redirect to action in asp.net mvc 2.0?
答案 1 :(得分:1)
在这种特殊情况下,您无需使用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);
}