2013-04-29 92 views
4

我編碼iframe網址與一些日期參數:asp.net mvc控制器無法識別DateTime 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); 

編碼的網址:

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) 

回答

1

要解決此問題,我轉換日期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(); 
} 
0

它看起來像endDate有時爲空(或者乾脆就沒有設置),所以你必須聲明參數爲空類型(DateTime?):

public ActionResult ExportReportAllMediaDetailsCsv 
    (int profileID, int organisationID, DateTime startDate, DateTime? endDate) 

在另一方面也可能是因爲日期時間格式未被識別,所以基本上它不能被解析爲有效的DateTime值。

+0

但它會拋出異常,即使它傳入並且不爲null,也不能發佈請求,除非兩個日期都已設置 – Xerxes 2013-04-29 07:45:10

+0

可能是因爲日期時間格式錯誤,您是否嘗試以不同格式發送日期時間字符串? – Zbigniew 2013-04-29 07:46:09

+0

與datetime最兼容的格式是什麼? – Xerxes 2013-04-29 07:46:59

1

您正在使用UK格式的日期字符串。由於只有endDate不工作,我的猜測是startDate被認爲是9月4日。另一方面,由於沒有第17個月,所以endDate不能綁定到DateTime對象。

這聽起來像你需要正確設置你的文化。嘗試添加下列到你的web.config,<system.web>下:

<globalization requestEncoding="utf-8" responseEncoding="utf-8" 
    culture="en-GB" /> 

有關全球化的更多信息,請參閱http://msdn.microsoft.com/en-us/library/c6zyy3s9(v=vs.100).aspx