【问题标题】:Invalid date format causing ModelState to be invalid in controller无效的日期格式导致 ModelState 在控制器中无效
【发布时间】:2014-02-07 00:04:47
【问题描述】:

当使用 ajax 调用从视图返回数据但仅用于编辑时,我得到一个无效的 ModelState。我将日期时间值从 SQL 记录传递到视图。日期在 Kendo UI 日期时间选择器中显示得很好。如果我从日期时间选择器中进行新的选择,我不会得到异常,只有当我不进行任何更改时才会得到无效错误。这是 MVC 控制器显示的内容:

The value '/Date(1387443600000)/' is not valid for RequiredByDate."

我在这里缺少什么?我第一次遇到这样的日期时间字段问题。

编辑:一旦控制器传入日期,就会在视图中对其进行格式化。这是我在页面上使用它并最终将其发送回控制器之前必须做的事情(出于调试目的,代码很冗长):

var myModel = model;
var jsonDate = myModel.Header.RequiredByDate; //  "/Date(1387443600000)/"
var value = new Date(parseInt(jsonDate.substr(6)));
var ret = value.getMonth() + 1 + "/" + value.getDate() + "/" + value.getFullYear(); 
//ret is now in normal date format "12-13-2013"

【问题讨论】:

  • 可能是 CultureInfo 设置影响它
  • @Has AlTaiar,是英文的。我在申请中使用了很多其他日期,但只有这个日期搞砸了
  • 实际提交给控制器的是什么?你能在 Fiddler 中看到吗?
  • @trailmax,这是我看到的返回到控制器的内容,它也是从控制器发送到视图的内容。 RequiredByDate: "/Date(1387443600000)/"
  • @trailmax,在 Microsoft 的 Amit 的帮助下发现了问题。结果是控制器传递了正确格式的日期,但在页面中我使用的是 Kendo MVVM,并且模型正在将日期转换为我在上面发布的值。最终不得不进行 javascript 转换。我已经编辑了我的帖子以显示代码。

标签: asp.net asp.net-mvc


【解决方案1】:

在上面发布编辑后,我发现我认为是解决问题的更好方法。这是一个将字符串转换为实际日期对象的函数:

function dateFromStringWithTime(str) {
    var match;
    if (!(match = str.match(/\d+/))) {
        return false;
    }
    var date = new Date();
    date.setTime(match[0] - 0);
    return date;
}

【讨论】:

    猜你喜欢
    • 2015-08-09
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多