我现在只是在学习 MVC3,这真的让我很困惑。
我有一个ViewModel
包含一些子视图模型。每个 ChildViewModel 都使用不同的 Partial View 渲染,并在提交时在 Controller 上执行不同的操作。所有 ChildViewModel 都应该对其数据执行一些自定义验证,如果成功,它应该转到下一页。如果验证失败,它应该简单地返回ParentView
并显示错误。
[HandleError]
public class MyController: Controller
{
public ActionResult Index()
{
var viewModel = new ParentViewModel();
return View("ParentView", viewModel);
}
[HttpPost]
public ActionResult ChildViewModelB_Action(ChildViewModelB viewModel)
{
if (ModelState.IsValid)
{
return View("ChildViewModelB_Page2", viewModel);
}
else
{
// I'm having trouble returning to the ParentView and
// simply displaying the ChildViewModel's errors, however
// discovered that creating a new copy of the VM and displaying
// the ParentView again shows the existing data and any errors
// But why??
var vm = new ParentViewModel();
return View("ParentView", vm);
}
}
}
例如,
- 该页面加载了 3 个选项。
- 用户选择选项 B 并填写表格。
- 提交后,子 ViewModel B 得到验证并失败。
- 页面返回 ParentView,ChildB 全部填写完毕,但 ChildB 错误现在也显示出来。
为什么创建与原始数据相同的ParentViewModel
显示的新副本?ParentView
ParentViewModel
ParentView
在进行服务器端验证之后,我应该以不同的方式返回吗?