MVC 5保存草稿,同时忽略缺少必填字段

时间:2014-10-17 16:35:44

标签: asp.net-mvc-5 ignore required

我搜索了当前的解决方案,但无法找到一套有关如何实现以下目标的指南或示例:

原始要求涉及具有必填字段的模型,因此我们在这些字段中添加了注释。像往常一样,最后一刻会有变化,我们被要求允许用户保存草稿。这些草稿必须允许用户在没有任何必填字段的情况下保存表单。

我想知道这个问题的最佳做法是什么。

我正在考虑的解决方案,但我接受他们可能是一个黑客(这就是我问专家的原因)

  1. 如果用户点击"另存为草稿"我可以捕获另一个ActionResult中包含信息的字段,并对这些字段运行基本验证。由于缺少必需字段的可能性,我正在考虑将捕获的信息存储在时间模型中(无需任何必需的注释)。如果用户决定编辑这样的表单,我可以使用temp填充视图中的字段。模型直到用户点击"提交"
  2. 另一种选择是删除所有必需的注释并运行客户端验证......但我想知道这样做所需的工作量。
  3. 非常感谢任何想法。

3 个答案:

答案 0 :(得分:1)

在完成之前,您不想将任何内容保存到数据库中。拥有一个可以为空的所有可重复的表是很好的地狱。在HTML5之前,典型的路径是将信息保存到会话中,然后您可以从中提取以重新填充字段,但这需要具有相对较高到期时间的会话才有用。

值得庆幸的是,HTML5具有本地存储,这是现在处理此问题的最佳方法。您只需在字段上查看onchange事件,然后将该值插入本地存储。如果用户成功提交表单,则会销毁本地存储值。否则,当页面加载并重新填充字段时,您将尝试从本地存储中读取这些值。

请参阅:http://diveintohtml5.info/storage.html

有相当广泛的支持,所以除非你需要担心IE6或IE7,否则你不会有任何问题。

答案 1 :(得分:0)

只需要2种保存方法。 1从自动保存调用,1用于提交过程。在自动保存方法中,不要检查 if(ModelState.IsValid)

您是选择将不完整的对象保存到同一个表还是另一个表。在关系世界中,我可能会使用一个单独的表,在非关系世界中,我会使用单个对象集合。

这将允许您保留相同的原始模型集。复制模型的成本非常高,有时需要通过值/复制来保证,但确保映射的成本存在。在这种情况下,我不相信映射有价值,除非你需要映射到不同的对象,因为ORM的约束可能在持久性级别。

这些部分形式具有深刻的价值。在服务器上记录此信息将允许您应用分析来了解用户放弃流程的原因。它还使您能够跟踪离开不完整表单的用户,例如发送提醒(唠叨)电子邮件。

答案 2 :(得分:0)

另一种选择(显然取决于您的数据)是遵守数据库而不是模型。我的意思是忽略Model.isValid并在前端禁用Javascript验证,然后满足数据库表。在表单中,您主要有:

  • 文本框 - 默认为“”或“”
  • 复选框 - 简单的真/假默认
  • 单选按钮 - 可能已经选择了一个
  • 日期 - 默认为DateTime.MinValue(或DateTimeUTC)
  • 枚举 - 默认为0(通常用于'未指定')

希望您还保存一个标志,指出它处于草稿状态,这样您就知道需要解释在再次显示半填充形式时设置的“空代码”。

相关问题