2011-11-23 93 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 
     });