2

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,还是应该重新考虑整个逻辑?是否有更好的模式来创建用于填充模型的多页“向导控件”?

4

2 回答 2

3

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

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

于 2010-02-08T16:31:09.093 回答
1

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

于 2010-04-10T13:26:06.657 回答