2009-09-08 102 views
0

在我的MVC应用程序的预订住宿我有以下几点:MVC验证多种形式

  • 行动来显示所选择的房间与输入形式的额外信息GET:“详细信息” 这种观点有多种形式它,每个发布到不同的行动。

例子:

  • 行动更新的客人POST数: “UpdateGuests”
  • 行动选择开始日期POST: “SelectStartDate”
  • 行动增加早餐POST:“AddBreakfast “
  • 删除空间POST的操作:”RemoveProductFromCart“
  • 进入下一步骤的操作POST:”继续“

大部分操作都将回重定向到GET:“详细信息”视图,如果需要的话用户可以执行其他操作,在该进行的情况下,这将重定向到下一个视图或有某种原因他们无法继续它将显示验证消息,为什么在“详细信息”视图。

我不确定处理验证的最佳方式,以下是我想到的一些选项。

  • 使用的TempData []存储验证信息并重定向到“详细信息”查看我们添加任何TempData的错误,所以ModelState中。
  • 在POST:“XXXXXX”行动填充的ModelState和渲染“详细信息”

这不是一个高容量的网站,以便TempData的是一个选项。

任何想法感激地欢迎。

编辑: 附加信息:

  • 我使用DataAnnotations在一些地方的验证规则。
  • 正在计划添加Ajax作为渐进式增强,但它应该没有工作。
+0

重定向的好处是如果用户刷新它不会要求重新发布数据 – Myster 2009-09-08 21:43:56

+0

我会给马丁一个答案,这是我现在要做的,但如果任何人有更好的主意我仍然可以从我看到此页面上改变我的主意;-) – Myster 2009-09-10 02:23:27

回答

1

我认为你的第二个选择是最好的:每个岗位的行动将做必要的验证,填充错误信息和每一个岗位的ModelState将返回相同的观点,用你的模型重建。

另一种选择,有点困难,但给人一种更好的用户体验是使用Ajax调用做一些动作(如人的更新次数,选择开始日期,加早餐)。这样一来,你只能返回这一动作所需要的信息的点点,刷新屏幕的那一部分,如果需要添加一些错误消息。

我希望这将有助于。

+0

增加ajax作为渐进式增强是计划,但我们还没有到那个:-) – Myster 2009-09-08 22:03:41

0

你看过书呆子晚餐如何验证吗?我已经使用这种方法与包含几个部分视图的表单,它很好。

你甚至可以动态修改使用jQuery,如果这就是你想要做什么来验证。

+0

(http://nerddinnerbook.s3.amazonaws.com/Part5.htm)书呆子晚餐似乎使用类似的方法来我的第二个选项。我使用DataAnnotations进行验证,但这不应该影响原理。 – Myster 2009-09-08 22:01:09