ajax中的日期将数据发布到MVC控制器

时间:2016-02-22 15:33:46

标签: jquery asp.net-mvc

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

public class MyModel
{
    public int Id { get; set; }
    public virtual ICollection<MySecondModel> MySecondModels { get; set; }
}

public class MySecondModel
{
    public int Id { get; set; }
    public int Counter { get; set; }
}

这是我的MVC控制器:

var person = await db.Persons.Select(i =>
                new PersonDTO()
                {
                    Id = i.Id,
                    Counter = i.MySecondModels.FirstOrDefault().Counter
                }).SingleOrDefaultAsync(i => i.Id == id);

然而,在我的DateObject中,我得到&#34; {1/1/0001 12:00:00 AM}&#34;。

我做错了什么?

4 个答案:

答案 0 :(得分:3)

  

我做错了什么?

对于初学者,您使用无效的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()

答案 1 :(得分:1)

您必须在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 Date对象的最佳解决方案: http://www.w3schools.com/js/js_dates.asp

答案 2 :(得分:0)

您必须为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
    }
});

答案 3 :(得分:0)

使用以下代码,您可以从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();
}