【发布时间】:2011-06-02 19:28:52
【问题描述】:
我希望看到任何人都可以告知我以下功能的 MVC 最佳实践。
用户可以创建表单,指定提交日期和其他详细信息。在填写表单时,如果用户更改日期字段,我希望应用程序检查该日期的表单是否已经存在,然后(通过消息框)询问用户是否希望加载它。如果表单不存在,我只需要排除日期更改。
这应该是某种 Ajax 请求吗?
【问题讨论】:
标签: asp.net-mvc ajax model-view-controller
我希望看到任何人都可以告知我以下功能的 MVC 最佳实践。
用户可以创建表单,指定提交日期和其他详细信息。在填写表单时,如果用户更改日期字段,我希望应用程序检查该日期的表单是否已经存在,然后(通过消息框)询问用户是否希望加载它。如果表单不存在,我只需要排除日期更改。
这应该是某种 Ajax 请求吗?
【问题讨论】:
标签: asp.net-mvc ajax model-view-controller
在理想情况下,您将支持以下两种情况:
1) 服务器端检查/验证步骤,在提交表单并发现同一日期的另一个表单时,会将用户重定向回原始提交页面(没有任何数据丢失),通知他们可能的复制,并让他们选择从那里加载表单。
2) 向服务器提交日期的客户端 AJAX 请求,询问基本问题“我们是否已经有具有此日期的表单”,如果是,则让他们选择从那里加载。这个选项很好,因为它让用户知道(可能在他们完成填写表单的所有体力劳动之前)已经输入了另一个。您的用户会感谢您节省了他们的时间,并且您可以节省到服务器的往返行程。
您不能不依赖 JavaScript 异步请求来为您强制执行业务规则,因为这很容易被规避,无论是有意还是无意(由禁用 JavaScript 的用户)
【讨论】:
在 MVC 3 中使用 jQuery 的远程验证。这将从您的控制器方法返回一条错误消息(如果您不返回 true 或 false,而是返回一个字符串。这是一个通用演示,但它应该给您一个想法。您正如马特所说,仍然需要在服务器上进行验证,但我想将其作为上述第 1 项的附加“操作方法”详细信息提供。
[RegularExpression(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", ErrorMessage = "请输入有效的电子邮件地址")] [必需的()] [显示(名称=“电子邮件地址”)] [Remote("EmailAddressUsed", "Demo", ErrorMessage = "Email Address Already On File")] 公共字符串电子邮件地址 { 获取;放; }在你的控制器中
公共 JsonResult EmailAddressUsed(字符串电子邮件地址) { if (emailAddress == "test@no.com") { return Json(emailAddress + " 已经在使用中。", JsonRequestBehavior.AllowGet); } 别的 { 返回 Json(true, JsonRequestBehavior.AllowGet); } }【讨论】: