【问题标题】:MVC best practice for date change possible redirect日期更改可能重定向的 MVC 最佳实践
【发布时间】:2011-06-02 19:28:52
【问题描述】:

我希望看到任何人都可以告知我以下功能的 MVC 最佳实践。

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

这应该是某种 Ajax 请求吗?

【问题讨论】:

    标签: asp.net-mvc ajax model-view-controller


    【解决方案1】:

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

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

    2) 向服务器提交日期的客户端 AJAX 请求,询问基本问题“我们是否已经有具有此日期的表单”,如果是,则让他们选择从那里加载。这个选项很好,因为它让用户知道(可能在他们完成填写表单的所有体力劳动之前)已经输入了另一个。您的用户会感谢您节省了他们的时间,并且您可以节省到服务器的往返行程。

    您不能不依赖 JavaScript 异步请求来为您强制执行业务规则,因为这很容易被规避,无论是有意还是无意(由禁用 JavaScript 的用户)

    【讨论】:

    • 感谢您的回复!我已经在一定程度上推进了选项 1,返回了控制器中是否存在表单的结果。我想我只是想知道通知/询问用户的最佳方式是什么。我在想可能是一个新出现的用于加载已经存在的表单(带有消息)的操作链接,如果用户选择不使用它并且仍然选择一个已经存在的日期,则会发生相同的查找循环。我只是想尽可能保持关注点分离的正确性,并且希望避免将其他表单的 id 带入我的视图模型。
    • 好的 - 我已经选择了选项 1。我已经将一个属性放入我的视图模型中作为该页面的 duplicateid,并返回到具有此属性集的视图,这会导致视图呈现“加载其他表单”操作链接,单击该链接时会重定向到具有重复 ID 的编辑控制器方法。
    【解决方案2】:

    在 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); } }

    【讨论】:

      猜你喜欢
      • 2011-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-27
      相关资源
      最近更新 更多