asp.net mvc控制器无法识别DateTime url参数
本文关键字:识别 DateTime url 参数 net mvc 控制器 asp | 更新日期: 2023-09-27 18:11:30
我正在编码一个带有一些日期参数的Iframe url:
var object = {
profileID: self.profileID(),
organisationID: self.organisationID(),
startDate: self.startDate(), // 09/04/2013
endDate: self.endDate() // 17/04/2013
};
iFrame.src = "ExportReportAllMediaDetailsCsv/?" + $.param(object);
编码后的url:
http://dev.neptune.local/Report/ExportReportAllMediaDetailsCsv/?profileID=41&organisationID=2252&startDate=09%2F04%2F2013&endDate=17%2F04%2F2013
然而,被调用的方法有时不能识别传入的日期时间:
The parameters dictionary contains a null entry for parameter 'endDate' of non-nullable type 'System.DateTime'
这是方法签名:
[CustomAuthorize(Definitions.RoleAnalystManager, Definitions.RoleProjectManager)]
public ActionResult ExportReportAllMediaDetailsCsv(int profileID, int organisationID, DateTime startDate, DateTime endDate)
您正在使用英国格式的日期字符串。因为只有endDate
不工作,我猜startDate
被认定为9月4日。另一方面,由于一年中没有第17个月,endDate
不能绑定到DateTime
对象。
<system.web>
下:
<globalization requestEncoding="utf-8" responseEncoding="utf-8"
culture="en-GB" />
有关全球化的更多信息,请参阅http://msdn.microsoft.com/en-us/library/c6zyy3s9(v=vs.100).aspx
为了解决这个问题,我将日期转换为UTC日期时间字符串:
var object = {
profileID: self.profileID(),
organisationID: self.organisationID(),
startDate: getUtcDateString(self.startDate()),
endDate:getUtcDateString(self.endDate())
};
function getUtcDateString(gbDate) {
var dayMonthYear = gbDate.split("/"),
newDate = new Date(dayMonthYear[2], dayMonthYear[1]-1, dayMonthYear[0]);
return newDate.toUTCString();
}
看起来endDate
有时是空的(或者只是没有设置),所以你必须声明参数为可空类型(DateTime?
):
public ActionResult ExportReportAllMediaDetailsCsv
(int profileID, int organisationID, DateTime startDate, DateTime? endDate)
另一方面,可能是因为datetime格式无法识别,所以基本上它不能被解析为有效的DateTime
值。