且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何从视图日期时间传递asp.net MVC到控制器

更新时间:2023-02-25 19:36:20

问题是周四12月9日十三时三十分00秒UTC + 0530 2010 无法解析进入C#中的有效DateTime对象。您可以尝试通过简单地调用 DateTime.Parse(星期四12月9日13点30分00秒UTC + 0530 2010)将失败。

我会建议,而不是从服务器返回的日期格式可以更好的回报 ISO 8601 一>格式,看起来像 2010-12-09T08:00:00.000Z

您可以轻松地转换为长日期时间格式为ISO 8601的javascript,

 新的日期(星期四12月9日13点30分零零秒UTC + 0530 2010)的toJSON()。

如果您使用的是 JSON.NET 库可以方便地控制方式其中,日期时间都被序列化。

更新:

 <脚本类型=文/ JavaScript的>  VAR学生= [
  {名称:维杰,ID:1,出生日期:2010-12-09T08:00:00.000Z},
  {名称:阿南,ID:2,DOB:2010-12-09T08:00:00.000Z}
  ];  $阿贾克斯({
    网址:/首页/索引
    键入:POST,
    数据类型:JSON
    数据:JSON.stringify(学生)
    的contentType:应用/ JSON的;字符集= UTF-8,
    成功:函数(结果){},
    故障:功能(R,E,S){警报(E); }
  });< / SCRIPT>[HttpPost]
公众的ActionResult指数(学生[]学生)
{
  ...
}

Am trying to pass below data form my view to controller.

Edited

<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; }

}

But in the controller am getting null for Name and ID , default datetime for DOB, I found that there is problem in passing datetime. Is there any better way to pass datetime from view to controller? do i miss any parsing?

The problem is Thu Dec 9 13:30:00 UTC+0530 2010 can't be parsed into a valid datetime object in c#. You can try that by simply calling DateTime.Parse("Thu Dec 9 13:30:00 UTC+0530 2010") it will fail.

I would suggest that instead of returning that date format from the server you can better return the ISO 8601 format that looks like 2010-12-09T08:00:00.000Z.

You can easily convert the long datetime format into ISO 8601 from javascript by,

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

If you are using JSON.NET library you can easily control the way in which the datetimes have to be serialized.

UPDATE:

<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)
{
  ...
}