ASP.NET MVC 2 RC 2“向导”用于整个模型验证

时间:2010-02-08 10:29:52

标签: asp.net-mvc asp.net-mvc-2 validation asp.net-mvc-2-validation

这里有一个很好的简单解决方案,用于MVC中的多页“向导”控件:

http://www.highoncoding.com/Articles/647_Creating_Wizard_Using_ASP_NET_MVC_Part_1.aspx

http://www.highoncoding.com/Articles/652_Creating_Wizard_in_ASP_NET_MVC_Part_2.aspx

模型分为几个步骤,隐藏字段用于在页面之间保存数据(有点类似于ViewState)。但是,随着MVC 2 RC2的发布,验证机制已从“输入验证”更改为“模型验证”: http://bradwilson.typepad.com/blog/2010/01/input-validation-vs-model-validation-in-aspnet-mvc.html

现在“向导”中的第一页永远不会被验证,因为它只填充模型的一部分。 (其余部分将在后续步骤中填充,但由于可能存在必填字段,因此在第一页的验证期间会显示验证错误,并且用户无法继续)。

有没有办法修改“向导控件”的这个实现以适应MVC RC2,还是应该重新考虑整个逻辑?是否有更好的模式来创建用于填充模型的多页“向导控件”?

2 个答案:

答案 0 :(得分:3)

我简要阅读了所列文章。我认为问题在于您将域对象(演示中的客户)传递到两个屏幕进行编辑。在第一个屏幕中编辑了一半客户,在下一个屏幕上编辑了另一半客户。

在这里应该帮助你的模式是,你应该(恕我直言)只传递一个“视图模型”,而不是将你的实际模型(客户)传递给你的演示文稿。这就是说每个视图(或本例中向导中的步骤)都有自己的模型。 CustomerNameViewModel和CustomerAddressViewModel可能是列出的教程的适当对象。这意味着当每个对象返回进行验证时,将完全填充数据。一旦对象经过适当验证,您就可以填充客户对象。一旦客户对象在向导结束时完成,您就会保留客户对象。

答案 1 :(得分:1)

结帐http://blog.stevensanderson.com/2010/02/19/partial-validation-in-aspnet-mvc-2/。 Steven演示了如何使用ActionFilter进行部分视图验证。