【问题标题】:How to pass datetime from view to controller in asp.net MVC如何在asp.net MVC中将日期时间从视图传递到控制器
【发布时间】:2012-06-25 08:32:18
【问题描述】:

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

已编辑

<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 的默认日期时间,我发现传递日期时间有问题。有没有更好的方法将日期时间从视图传递到控制器?我错过了任何解析吗?

【问题讨论】:

  • 控制器上的 Action 是什么样的?
  • [ObjectFilter(Param = "studentData", RootType = typeof(Stu[]))] public JsonResult UpadetStudent(Stu[] studentData) { return this.Json(new { success = true }); } 我在控制器中使用上面的代码。
  • 那么你的 Stu 对象是什么样子的?它有 DOB 属性吗?您是否使用 firebug 或 fiddler 验证了 jQuery.ajax 实际发布到服务器的内容?
  • 这就是它的样子。 [DataContract] public class Stu { [DataMember] public string Name { get;放; } [DataMember] 公共 int ID { 获取;放; } [DataMember] 公共日期时间 DOB{ 获取;放; } }
  • 我刚刚复制了你的代码并尝试过,它工作得很好。唯一的区别是我没有那个 ObjectFilter。

标签: asp.net-mvc


【解决方案1】:

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

我建议您最好返回类似于2010-12-09T08:00:00.000ZISO 8601 格式,而不是从服务器返回该日期格式。

您可以通过 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)
{
  ...
}

【讨论】:

  • var studentString = JSON.stringify(Student);本身会改变格式,“studentString”会有这种格式的 DOB 2010-12-09T08:00:00.000Z 只有然后为什么它不起作用?
  • 我刚刚测试了一个简单的文本框,输入 ISO 格式的日期时间,效果很好
  • 请发布更多代码,然后我可以帮助找出问题所在
  • 顺便问一下,为什么要对数据进行字符串化?您可以将其用作 $.post 中的普通对象,对吗?
  • 我已经在上面的问题和 cmets 中发布了我的所有代码。出于某种原因,我不想使用 $.post。请帮助我如何使用上面的代码完成这项工作。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多