我有以下行动
[GET("Foo")]
public virtual ActionResult Foo()
{
return View(new FooViewModel());
}
此操作的视图调用此部分视图
@{ Html.RenderAction(MVC.FooBar.AddFoo()); }
带控制器操作
[ChildActionOnly]
[GET("Foo/Add")]
public virtual ActionResult AddFoo()
{
var viewModel = new AddFooViewModel();
return PartialView(viewModel);
}
[POST("Foo/Add")]
public virtual ActionResult AddFooPost(AddFooViewModel viewModel)
{
// If ModelState is invalid, how do I redirect back to /Foo
// with the AddFooViewModel ModelState intact??
if (!ModelState.IsValid)
return MVC.FooBar.Foo();
// ... persist changes and redirect
return RedirectToAction(MVC.FooBar.Foo());
}
如果有人使用ModelState错误提交AddFoo表单,我希望POST操作重定向回/ Foo并显示带有ModelState错误的AddFoo局部视图。处理这个问题的最佳方法是什么?
答案 0 :(得分:0)
我认为你可以通过两种方式实现这一目标:
我更喜欢第二种选择。
答案 1 :(得分:0)
我最终使用控制器上的TempData
属性将viewmodel放入ModelStateToTempData
这样的
[ChildActionOnly]
[GET("Foo/Add")]
public virtual ActionResult AddFoo()
{
var viewModel = TempData["AddFooViewModel"] as AddFooViewModel ?? new AddFooViewModel();
return PartialView(viewModel);
}
[POST("Foo/Add")]
public virtual ActionResult AddFooPost(AddFooViewModel viewModel)
{
// If ModelState is invalid, how do I redirect back to /Foo
// with the AddFooViewModel ModelState intact??
if (!ModelState.IsValid)
{
TempData["AddFooViewModel"] = viewModel;
return RedirectToAction(MVC.FooBar.Foo());
}
// ... persist changes and redirect
return RedirectToAction(MVC.FooBar.Foo());
}