【问题标题】:Date in ajax post data to MVC controllerajax 中的日期将数据发布到 MVC 控制器
【发布时间】:2020-10-10 22:18:41
【问题描述】:

我想将一个 DateTime 从 javascript 发布到我的 MVC 控制器。日期时间字符串的格式为 yy-mm-dd hh:mm。这是我的 JavaScript 代码:

 var dataObject = {
         dateData: New Date('16-01-01 15:30')
        }

        console.log(dataObject);

        $.ajax({
            type: "POST",
            url: '@Url.Content("~/Service/DateTest")',
            dataType: "json",
            data: dataObject,
            },
            success: function (response) {

            }
        });
    }

这是我的 MVC 控制器:

  public ActionResult DateTest(DateObject data)
        {
            return Json("ok", JsonRequestBehavior.AllowGet);
        }

但是在我的 DateObject 中,我得到“{1/1/0001 12:00:00 AM}”。

我做错了什么?

【问题讨论】:

  • MVC在什么框架下?

标签: jquery asp.net-mvc


【解决方案1】:

我做错了什么?

对于初学者,您使用了无效的 javascript 并在此行收到错误:

dateData: New Date('16-01-01 15:30')

请记住,javascript 是一种区分大小写的语言,所以我猜您可能想使用 Date 构造函数:

dateData: new Date('16-01-01 15:30')

同时使用 ISO8601 是您应该传递给构造函数的推荐格式:

dateData: new Date('2016-01-01T15:30')

您也可以在发送之前将其转换为字符串:

dateData: new Date('2016-01-01T15:30').toISOString()

【讨论】:

  • 使用 dateData 时出现同样的问题:new Date('01-01-2016T15:30'),会不会是我的 c# 对象中的 dateData 属于 DateTime 类型?
  • new Date('01-01-2016T15:30') 在控制台中给出无效日期
  • 在发送前尝试使用toISOString()。也使用2016-01-01T15:30 格式。我已经用一个例子更新了我的答案。
  • 如果我想传递多个日期值,我可以使用 data: "{'date1': 'dataObject1', 'date2':'dataObject2'}",?
【解决方案2】:

您必须在 Date 对象中使用正确的日期格式:

var dataObject = {
   dateData: new Date("October 13, 2014 11:13:00")
}

console.log(dataObject);

$.ajax({
   type: "POST",
   url: '@Url.Content("~/Service/DateTest")',
   dataType: "json",
   data: dataObject,
   success: function (response) {
    // whatever you need to do in case of success
   }
});

Javascript 日期对象的最佳解决方案: http://www.w3schools.com/js/js_dates.asp

【讨论】:

    【解决方案3】:

    您必须在 ajax 请求中为您的 data 属性调用 JSON.stringify(dateData)。如果您的日期未序列化,则模型绑定器将无法正确反序列化它。一般来说,每次传递一个带有 dataType: json 的 javascript 对象时,都使用 JSON.stringify。 您在 $.ajax() 调用中也有一些错误。 这是一个更正的版本:

    var dataObject = {
        dateData: new Date('16-01-01 15:30')
    }
    
    console.log(dataObject);
    
    $.ajax({
        type: "POST",
        url: '@Url.Content("~/Service/DateTest")',
        dataType: "json",
        data: dataObject,
        success: function (response) {
            // whatever you need to do in case of success
        }
    });
    

    【讨论】:

      【解决方案4】:

      使用下面的代码,您可以从 ajax 成功部分正确格式化您的日期时间,以便在您的视图中正确显示。

      function ToJavaScriptDate(value) {
            var pattern = /Date\(([^)]+)\)/;
            var results = pattern.exec(value);
            var dt = new Date(parseFloat(results[1]));
            return dt.getFullYear() + "/" + (dt.getMonth() + 1) + "/" + dt.getDate();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-12-07
        • 2015-01-31
        • 2014-01-22
        • 1970-01-01
        • 2013-10-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多