在我在VS2010中开发的MVC 4项目中,我有一个屏幕,其下拉列表显示日期为显示文本的dd-MMM-yyyy,基础值为dd-mm-yyyy。
在发布数据的函数中,当我发出警告时,我可以看到所选的值是dd-mm-yyy。
alert($("#dropdwn_BirthDateVal").val());
上面的这一行以dd-mm-yyyy格式显示了我想要的日期。
但是当我尝试将该值发布到我的控制器时,使用相同的方法
$.ajax({
type: "POST",
url:"@Url.Content("~/Home/GetUserDetails")",
async:false,
dataType: "JSON",
data: {
//.....other string and integer values
//.....that go thru properly
"myDto.DOB": $("#dropdwn_BirthDateVal").val()
},
error: function (error) {
alert(error);
},
..... remaining code here
...日期以1/1/0001 12:00:00 AM
我发布的控制器操作,'GetUserDetails'有一个名为UserVM的ViewModel类作为其参数。 UserVM有一个名为MyDto的dto类。在MyDto中是Date属性,名为DOB,类型为DateTime。 MyDto还有其他属性。字符串和整数值正确。
我错过了什么?
答案 0 :(得分:5)
将日期格式化为ISO-8601时,需要将其格式化为服务器,例如: 2011-12-19T15:28:46.493Z
this similiar question的答案显示了实现此目的的一些方法,我最喜欢的是JSON.parse(JSON.stringify(new Date()))
但不支持IE7。
答案 1 :(得分:1)
收到的DateTime
变为1/1/0001 12:00:00 AM
,因为无法正确解析日期格式(dd-mm-yyyy)。当框架无法解析您的日期/时间字符串时,结果就是您上面的结果。
结果取决于您机器的本地化。例如,在en-US
本地化下,.NET框架默认情况下日期格式为MM/dd/yyyy
。但您可以按如下方式明确指定日期格式。
using System.Globalization;
// dateString is the string in your dd-MM-yyyy format
public void GetValidDate(string dateString)
{
DateTime parsedDateTime;
DateTime.TryParseExact(dateString, "dd-MM-yyyy", null,
DateTimeStyles.None, out parsedDateTime)
}