【问题标题】:How to pass an empty datetime to an mvc form with a [require] attribute?如何将空日期时间传递给具有 [require] 属性的 mvc 表单?
【发布时间】:2019-09-11 13:42:01
【问题描述】:

我在日历系统的多个页面中使用创建表单的部分视图。在我的主页上,一切正常,不需要任何东西。但是在我的其他页面上,它需要一个模型来传递给它

 @await Html.PartialAsync("Create.cshtml", new Horraire {

    Jour = jourID,
    Semaine = semaine.GetValueOrDefault(),
    début = new DateTime(),
    fin = new DateTime()
});

问题是,我不知道如何给它一个 空日期时间,它不会通过添加模型不接受的毫秒数来破坏输入

我尝试将 null datetime 传递给它,但由于 datetime 不可为 null 并且是必需的,因此模型不接受它

Working form
<input class="form-control" type="time" data-val="true" data-val-required="The Heure de Fin field is required." id="fin" name="fin" value="">

Problematic generated form
<input class="form-control" type="time" data-val="true" data-val-required="The Heure de Fin field is required." id="fin" name="fin" value="00:00:00.000">

我希望表单能够像其他表单一样工作,并且该值真正为空。这个表格需要很长时间才能完成,应该尽快填写

【问题讨论】:

  • “由于日期时间不可为空且需要,因此模型不接受它” - 如果需要,则需要。听起来您需要更新模型以不再需要该值。
  • 如果将值设置为 00:00:00 会发生什么
  • 您可以在 DateTime 上使用格式字符串 - ToString("yyyy-MM-dd HH:mm:ss")
  • 我的意思是,你必须给它两个日期时间,否则日程安排就没有意义了。数据库需要它。但是在你输入之前它应该是空的。
  • 基本格式是一个简单的 HH:mm,但它似乎并没有被部分视图所采用,即使我尝试以 value="" 之类的形式强制使用另一个默认值跨度>

标签: c# asp.net asp.net-mvc datetime asp.net-core


【解决方案1】:

您的DateTime 属性必须可以为空,即使它是必需的,即:

public class Horraire
{
    ...

    [Required]
    public DateTime? fin { get; set; }
}

然后,表单上的值最初将为空白,但如果用户未能选择日期和时间,那么您仍然会收到验证错误。

【讨论】:

  • 如果我做这样的事情我不能再使用像 Substract 这样的函数,从而破坏我的代码 appart
  • 不,您只需要实际访问该值,即fin.Value.Subtract。您当然需要检查 fin.HasValue 以防止 NullReferenceExceptions 如果它恰好为空。不过,由于它是必需的,因此如果 ModelState.IsValid 为真,则它不会为空。
  • 感谢 .Value 的知识它现在工作得很好,我可以将 Datetime 设为空。表单也正常工作
【解决方案2】:

您可以使用 Nullable 日期时间,该日期时间专门用于 null 日期时间。

DateTime? nullableDateTime = null;

【讨论】:

  • 此外,您仍然可以使用 [Required] 数据注释标记可空值。数据注释仅在模型通过验证器运行时触发。
猜你喜欢
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
相关资源
最近更新 更多