2011-11-23 21 views
1

我正在使用jquery UI datepicker發送fromto日期到控制器。我的問題是控制器沒有獲取發佈數據。控制器沒有獲取發佈數據

在我看來:

to_date.datepicker({ 
    dateFormat: 'yy-mm-dd', 
    onSelect: function (selectedDate, inst) { 
     if (from_date.datepicker("getDate") > to_date.datepicker("getDate")) { 
     // error check 
     } else { 
      var from = from_date.val(); 
      var to = selectedDate; 

      var data = { 
       FromDate: from, 
       ToDate: to 
      }; 

      var jsonData = JSON.stringify(data); 

      $.ajax({ 
       type: 'POST', 
       url: 'View', 
       dataType: 'json', 
       contentType: 'application/json; charset=utf-8', 
       cache: false, 
       data: jsonData 
      }); 
     } 
    } 
}); 

在我的控制器:

[HttpPost] 
public JsonResult DorView(string dates) 
{ 
    if (ModelState.IsValid) 
    { 

     JavaScriptSerializer js = new JavaScriptSerializer(); 

     // Will die on this line because dates is empty 
     DatePicker JsonDate = js.Deserialize<DatePicker>(dates); 

     return Json(dates); 
    } 

    return Json(dates); 
} 
+0

@SeanThoman我離開了我的調試語句出來的帖子,但是「日期」在服務器端是空的(在串行器初始化之前調用)。在客戶端,我可以看到JSON被髮布,所以我不認爲它是這種情況下的Deseralizer。 –

+0

你是對的,我最初誤讀了,所以刪除了我的評論。 –

回答

1

您不需要在控制器中手動執行JSON反序列化。只需使用視圖模型,並使默認模型聯編程序完成這項工作。

所以定義視圖模型

public class Dates 
{ 
    public DateTime FromDate { get; set; } 
    public DateTime ToDate { get; set; } 
} 

,有你的控制器動作持這種觀點模型參數:

[HttpPost] 
public ActionResult DorView(Dates dates) 
{ 
    if (ModelState.IsValid) 
    { 
     // do something with dates.FromDate and dates.ToDate 

     return Json(dates); 
    } 

    return Json(dates); 
} 
+0

這是問題的一部分。我的JSON字符串沒有正確構建。謝謝! –

0

您需要發送一個鍵值對名爲dates關鍵。

 $.ajax({ 
      type: 'POST', 
      url: 'View', 
      dataType: 'json', 
      contentType: 'application/json; charset=utf-8', 
      cache: false, 
      data: "dates=" + jsonData 
     });