Asp.net mvc 日期更改的MVC最佳实践可能重定向

Asp.net mvc 日期更改的MVC最佳实践可能重定向,asp.net-mvc,ajax,model-view-controller,Asp.net Mvc,Ajax,Model View Controller,我希望有人能告诉我MVC在以下功能方面的最佳实践 用户可以创建表单,指定提交日期和其他详细信息。在填写表单时,如果用户更改了日期字段,我希望应用程序先检查该日期的表单是否已经存在,然后再通过消息框询问用户是否希望加载该表单。如果表单不存在,我只需要将日期更改排除在外 这应该是某种Ajax请求吗?在理想情况下,您将支持以下两种场景: 1服务器端检查/验证步骤,在提交表单并发现同一日期的另一表单时,会将用户重定向回原始提交页面,而不会丢失任何数据,通知他们可能的副本,并让他们选择从那里加载表单 2客

我希望有人能告诉我MVC在以下功能方面的最佳实践

用户可以创建表单,指定提交日期和其他详细信息。在填写表单时,如果用户更改了日期字段,我希望应用程序先检查该日期的表单是否已经存在,然后再通过消息框询问用户是否希望加载该表单。如果表单不存在,我只需要将日期更改排除在外


这应该是某种Ajax请求吗?

在理想情况下,您将支持以下两种场景:

1服务器端检查/验证步骤,在提交表单并发现同一日期的另一表单时,会将用户重定向回原始提交页面,而不会丢失任何数据,通知他们可能的副本,并让他们选择从那里加载表单

2客户端AJAX请求,将日期提交给服务器,询问基本问题:我们是否已经有一个包含此日期的表单,如果有,则让他们选择从那里加载。这个选项很好,因为它可以让用户在完成填写表单的所有手工劳动之前知道已经输入了另一个表单。您的用户会感谢您节省了他们的时间,您也节省了往返服务器的时间


您不能依赖JavaScript异步请求来为您强制执行业务规则,因为禁用JavaScript的用户可以有意或无意地规避这一问题。如果您不返回true或false,而是返回一个字符串,那么这将从控制器方法返回一条错误消息。这是一个通用的演示,但它应该给你一个想法。您仍然需要在服务器上验证,正如Matt所说,但我想提供关于上述第1项的附加“如何”详细信息

[RegularExpression(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", ErrorMessage = "Please enter a valid e-mail address")] [Required()] [Display(Name = "Email Address")] [Remote("EmailAddressUsed", "Demo", ErrorMessage = "Email Address Already On File")] public string EmailAddress { get; set; } 在控制器中

public JsonResult EmailAddressUsed(string emailAddress) { if (emailAddress == "test@no.com") { return Json(emailAddress + " is already in use.", JsonRequestBehavior.AllowGet); } else { return Json(true, JsonRequestBehavior.AllowGet); } }
谢谢你的回复!我已经将选项1推进到一定程度,返回窗体是否存在于控制器中的结果。我想我只是想知道通知/询问用户的最佳方式是什么。我想可能是一个新出现的操作链接,用于加载已存在的表单和消息,如果用户选择不使用此链接,并且仍然选择已存在的日期,则会发生相同的查找循环。我只是尽量保持关注点的分离尽可能正确,并且希望避免将其他表单的id带入我的视图模型中。我已将页面的属性作为duplicateid放入视图模型中,并返回到具有此属性集的视图,这会导致视图呈现“加载其他表单”操作链接,单击该链接时会重定向到具有重复id的编辑控制器方法。