Asp.net mvc 5 MVC 5保存草稿时忽略缺少的必填字段

Asp.net mvc 5 MVC 5保存草稿时忽略缺少的必填字段,asp.net-mvc-5,ignore,required,Asp.net Mvc 5,Ignore,Required,我已经搜索了当前的解决方案,但找不到一套关于如何实现以下目标的指南或示例: 原始需求涉及带有必填字段的模型,因此我们在这些字段中添加了注释。和往常一样,有一个最后一分钟的更改,我们被要求允许用户保存草稿。这些草稿必须允许用户保存表单,而不需要任何必填字段 我想知道解决这个问题的最佳做法是什么 我正在考虑解决方案,但我承认它们可能是一种黑客行为(这就是我询问专家的原因) 如果用户单击“另存为草稿”,我可以捕获在另一个ActionResult中包含信息的字段,并对这些字段运行基本验证。由于有可能缺少

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

原始需求涉及带有必填字段的模型,因此我们在这些字段中添加了注释。和往常一样,有一个最后一分钟的更改,我们被要求允许用户保存草稿。这些草稿必须允许用户保存表单,而不需要任何必填字段

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

我正在考虑解决方案,但我承认它们可能是一种黑客行为(这就是我询问专家的原因)

  • 如果用户单击“另存为草稿”,我可以捕获在另一个
    ActionResult
    中包含信息的字段,并对这些字段运行基本验证。由于有可能缺少必需的字段,因此我考虑将捕获的信息存储在一个时态模型中(没有任何必需的注释)。如果用户决定编辑这样的表单,我可以用temp填充视图中的字段。建模,直到用户单击“提交”
  • 另一个选项是删除所有必需的注释并运行客户端验证。。。但是我想知道这样做需要做多少工作
    非常感谢您的任何想法。

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

    谢天谢地,HTML5有本地存储,这是现在处理这一问题的最佳方式。您只需监视字段上的onchange事件,然后将该值插入本地存储。如果用户成功提交表单,则销毁本地存储值。否则,当页面加载并重新填充字段时,您将尝试从本地存储器读取这些值

    见:


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

    只有两种保存方法。从autosave调用的1和用于提交流程的1。在自动保存方法中,如果(ModelState.IsValid),则不要选中

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

    这将允许您保留相同的原始模型集。复制您的模型的成本非常高,当然有些时候需要按价值传递/复制,但要确保映射的成本是存在的。在这种情况下,我不认为映射有价值,除非在持久性级别,因为ORM的约束需要映射到不同的对象

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

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

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

    希望您还保存了一个标志,指示它处于草稿状态,以便您知道在再次显示半填充表单时需要解释您设置的“空代码”。

    我完全不同意这个答案,这些部分答案调查是非常有意义的业务信息。您需要在服务器上提供这些信息,以便能够分析用户不填写表单的原因。总是有放弃。将其完全留在浏览器中可以防止信息浮出水面。如果有令人信服的商业案例,那么可能。但是,OP没有传达这样的情景。据我们所知,这是一个管理门户网站,在这种情况下,放弃意味着什么。Autosave意味着用户体验是一个首要问题。如果用户体验值得关注,那么围绕用户行为的商业价值是巨大的。企业并不关心管理工具的用户体验(除非他们从事销售管理工具的业务)。这是一个非常令人厌倦的观点。作为一名开发人员,我对内部应用程序和外部应用程序一样关心。一个用户就是一个用户,仅仅因为他们和我在同一家公司工作并不意味着他们应该得到更糟糕的体验。然而,即使对于非内部应用程序,也不是所有的部分形式都有意义。你是在对灰色的东西应用笼统的逻辑。是的,我会把一致性放在mish mash之上。如果您要进行自动保存,最好有一种方法,而不是使用浏览器中的此页面,此页面位于服务器上,此页面使用便利贴。