6

我试图将以下数据从我的视图传递给控制器​​。

已编辑

<script type="text/javascript">
    var pathname = 'http://' + window.location.host;
  var Student = [
  { Name: "Vijay", ID: 1, DOB: "2010-12-09T08:00:00.000Z" },
  { Name: "Anand", ID: 2, DOB: "2010-12-09T08:00:00.000Z" }
  ];

  $.ajax({
    url: pathname + "/Home/UpadetStu",
    type: "POST",
    dataType: "json",
    data: JSON.stringify(Student),
    contentType: "application/json; charset=utf-8",
    success: function (result) { }, 
    failure: function (r, e, s) { alert(e); } 
  });

</script>



   [ObjectFilter(Param = "stuData", RootType = typeof(Stu[]))]
    public JsonResult UpadetStu(Stu[] stuData)
    {
        return this.Json(new { success = true });
    }

[DataContract]
public class Stu
{
    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public int ID { get; set; }

    [DataMember]
    public DateTime? DOB { get; set; }

}

但是在控制器中 Name 和 ID 为空,DOB 的默认日期时间,我发现传递日期时间有问题。有没有更好的方法将日期时间从视图传递到控制器?我错过任何解析吗?

4

2 回答 2

6

问题是Thu Dec 9 13:30:00 UTC+0530 2010无法在 c# 中解析为有效的日期时间对象。您可以通过简单地调用它来尝试DateTime.Parse("Thu Dec 9 13:30:00 UTC+0530 2010")它会失败。

我建议不要从服务器返回该日期格式,而是可以更好地返回看起来像的ISO 86012010-12-09T08:00:00.000Z格式。

您可以通过以下方式轻松地将长日期时间格式从 javascript 转换为 ISO 8601,

new Date("Thu Dec 9 13:30:00 UTC+0530 2010").toJSON();

如果您使用的是JSON.NET库,则可以轻松控制必须序列化日期时间的方式。

更新:

<script type="text/javascript">

  var Student = [
  { Name: "Vijay", ID: 1, DOB: "2010-12-09T08:00:00.000Z" },
  { Name: "Anand", ID: 2, DOB: "2010-12-09T08:00:00.000Z" }
  ];

  $.ajax({
    url: "/Home/Index",
    type: "POST",
    dataType: "json",
    data: JSON.stringify(Student),
    contentType: "application/json; charset=utf-8",
    success: function (result) { }, 
    failure: function (r, e, s) { alert(e); } 
  });

</script>

[HttpPost]
public ActionResult Index(Student[] students)
{
  ...
}
于 2012-06-25T10:11:36.993 回答
0

如果您的控制器中的 studentData 对象为空,则 JSON.stringify(Student) 正在生成一个不是正确 JSON 的对象或无法解析为您的 Stu 对象的对象。

验证您的 JS Student 对象是否正确,然后验证您生成的 JSON 执行 JSON.stringify

于 2012-06-25T10:00:41.313 回答