2013-06-24 15 views
0

我感到困惑,爲什麼我的控制器不recieving STARTDATE參數..從jQuery日期選擇器jQuery的AJAX帳日期

我的想法是它有事情做與格式。

在這種情況下,我不能強制它使用表單發佈的模型。

該參數作爲null進入操作。

$.ajax({ 
     url: '@Url.Action("myAction")', 
     type: 'GET', 
     cache: false, 
     data: { startDate: $('#startDate').val(), endDate: $('#endDate').val() }, 
     success: function (result) { 
      $('#updateDiv').html(result); 
     } 
    }); 

控制器

public ActionResult myAction(DateTime? startDate, DateTime? endDate) 

伊夫還試圖;

startDate: $.datepicker.formatDate('dd/mm/yy', new Date()) 
+0

,如果我把'警報($(「#結束日期」) .val());'它顯示'dd/mm/yy'格式的預期的今天日期 – Doomsknight

+1

這是一個格式問題,很難將DateTime直接傳遞到服務器,最好接收字符串,然後解析約會時間。 – CarlosB

+0

嘗試在瀏覽器的開發人員工具中跟蹤您的ajax請求。查看日期是否真的在Data中發送到客戶端。 – vendettamit

回答

4

是的,它很可能是一個格式的問題 - 我忘了確切的原因。

我建議改變控制器的動作參數爲string類型,然後你可以手動解析他們在正確的格式,這是我總是這樣做,從沒有任何問題,因爲移動到這種方法。

事情是這樣的:

public ActionResult myAction(string startDate, string endDate) 
{ 
    DateTime? startDT = null; 
    if(!string.IsNullOrWhitespace(startDate)) 
    { 
     startDT = DateTime.ParseExact(startDate, "dd/MM/yyyy", null); 
    } 
} 

可能會更好地使用TryParseExact而是取決於你想如何處理壞數據真的

+0

你只是改變毫米爲MM:^)這似乎工作.. :)!至少半天的工作結果是有用的。奇怪的是,我不需要更改基於模型的表單,在發佈日期時使用相同的操作。它似乎認識到它是一個字符串,並解析正確。謝謝 – Doomsknight

+0

@Doomsknight:我從一開始就把'MM'。 .Net日期格式和java腳本數據格式的語法不同,因此您不能使用相同的語法。我建議將兩者都扔在配置類(或web.config)中,並在代碼中引用它們。只需要你需要快速改變格式 – musefan

+0

最好使用tryParseExact有收到的數據可能是無效的:),並且該表示法上的「mm」用於分鐘而不是幾個月(僅用於說明)。 – CarlosB