MVC表单提交日期时间字段无法识别格式

时间:2018-10-23 11:16:25

标签: c# asp.net-mvc model-binding

我的输入字段采用dd / MM / yyyy hh:mm格式,例如31/12/2018 21:05 但是当它提交到post操作时,它不会绑定到datetime类。

<input name="startDate" type="text" class="form-control m-input" readonly="" value="31/12/2018 21:05">

我的viewmodel属性是这样

public DateTime StartDate {get;set;}

如果我将上述类型更改为字符串,则可以正常工作....或者如果我以yyyy-mm-dd HH:mm格式传递输入数据,则可以将其绑定到DateTime类型。 我试过在注解下面加注,但仍然没有运气。

    [DataType(DataType.DateTime)]
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy hh:mm}", ApplyFormatInEditMode = true)]
    public DateTime StartDate {get;set;}

我没有使用helper类,它只是html中的输入字段。 我可以将其作为一个字符串字段并转换为日期时间,但想知道是否有任何更简单的方法。

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

没有简单的方法。

您的输入控件包含日期和时间的文本表示。您的模型属性需要一个DateTime对象。您必须将一个转换为另一个。

答案 1 :(得分:0)

问题似乎是小时格式,为“ hh”,但输入值为“ 21:05”。

此行工作正常:

var date = DateTime.ParseExact("31/12/2018 21:05", "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture);   

但是如果格式为“ dd / MM / yyyy hh:mm”,则会出现相同的错误

修改

您已经更新了该主题,据我了解,您可以在此处选择几个选项。一种是将值作为字符串接收并解析,或者只是创建客户ModelBinder,这是一个示例: https://www.codeproject.com/Tips/1078167/DateTime-Issue-In-MVC

祝你好运!

答案 2 :(得分:0)

这可能是由于您当前的区域性设置(如果您将StartDate文本框的值更改为2018-12-31 21:05,则应该可以使用)。将en-GB(例如)区域性添加到您的Web.config:

<system.web>
    <globalization uiCulture="en" culture="en-GB"/>
</system.web>