【问题标题】:Model bind empty string for DateTime to null模型将 DateTime 的空字符串绑定为 null
【发布时间】:2014-05-15 14:58:55
【问题描述】:

我在搞乱 html5 日期输入字段。

<input type="date" >

我注意到,当您清除该字段时,该值被设置为空字符串。因此,当您将此值发布到后端 (ASP.NET MVC) 时,模型绑定器会给出“字符串未被识别为有效日期时间”,而不是仅将其设置为 null。

所以我想知道告诉模型绑定器当字段类型为 DateTime 时,应该将空字符串解析为 null 的最简单方法是什么。

模型示例:

public class MyModel
{
    public DateTime? MyDate { get; set; }
}

Ctrl 示例:

public void Post(MyModel model)
{
    ...
}

【问题讨论】:

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


    【解决方案1】:

    DateTime 是一个value type,它不能为空。您可以使用Nullable&lt;T&gt; struct(DateTime? 或Nullable&lt;DateTime&gt;)来保存空值。

    public class MyModel
    {
        public Nullable<DateTime> MyDate { get; set; }
    }
    

    【讨论】:

    • 哈哈,哎呀。我只是假设因为它是一个对象:)。等等,让我用 nullable 进行测试。
    • 这是使用视图模型的众多原因之一。如果您的数据库持久实体上的MyDate 属性需要不为空,您仍然可以使视图模型上的属性为空,然后在尝试设置@987654329 时找到一些方法来恢复它是否为空@ 在实体上。
    • 好的,刚刚测试过。约会时间?仍然会产生错误。
    • @Snæbjørn,错误是由于 MVC 处理 .Net 中 date 类型到 DateTime 的映射,我不是 MVC 专家,但你不能在非-可空DateTime。所以我的回答,实际上回答了你问题的一半,我会把它留在这里,直到你得到一些有效的新答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    相关资源
    最近更新 更多