我想将一个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;。
我做错了什么?
答案 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();
}