C# ASP.NET MVC模型绑定器未正确解析ISO日期时间

C# ASP.NET MVC模型绑定器未正确解析ISO日期时间,c#,asp.net-mvc-2,C#,Asp.net Mvc 2,我一直在尝试向我的控制器发布表单: Id=0&ReportDate=2010-08-09T00%3A00%3A00&SampleText=Save 这是发送的XHR post,我的控制器将拾取除ReportDate之外的所有属性,而不是将其设置为.NET epoch DateTime。有什么想法吗 编辑:如果我设置了另一个变量,ReportDateString,将该字符串发送到控制器并执行DateTime.Parse(),则它可以正常工作。然而,我真的希望能够直接绑定DateT

我一直在尝试向我的控制器发布表单:

Id=0&ReportDate=2010-08-09T00%3A00%3A00&SampleText=Save
这是发送的XHR post,我的控制器将拾取除ReportDate之外的所有属性,而不是将其设置为.NET epoch DateTime。有什么想法吗

编辑:如果我设置了另一个变量,
ReportDateString
,将该字符串发送到控制器并执行
DateTime.Parse()
,则它可以正常工作。然而,我真的希望能够直接绑定DateTime,因为这让人感觉不舒服

编辑2:这是我的控制器代码:

public void CreateTest(MyObject myObject) {
    myObjectRepository.Update(rootObject);          
}
我的目标是:

public class MyObject {
    public int Id { get; set; }
    public string SampleText{ get; set; }
    public DateTime ReportDate { get; set; }
}
如果我设置了调试,我可以看到模型绑定器成功地绑定了我帖子上的所有属性,除了它设置为纪元日期的日期时间

编辑3: 表格:


这对我来说很好:

 public void Test2(DateTime ReportDate, string SampleText, int Id)
使用url:

/Home/Test2?Id=0&ReportDate=2010-08-09T00:00:00&SampleText=Save
当我破译代码时,ReportDate就是{09.08.2010 00:00:00}

编辑-其他代码:

<% using (Html.BeginForm())
   { %>
    <%= Html.Hidden("ReportDate", "2010-08-09T00:00:00") %>
    <%= Html.TextBox("SampleText", "Save") %>
    <%= Html.TextBox("Id", "1") %>
    <input type="submit" />
<%} %>

如果MyObject是原始问题的复制/粘贴…

没有那么棘手,您需要将文化设置添加到您的网络配置中。这应该能解决你的问题。在我的例子中,它是TR,您可以尝试添加您的

<system.web>
    <customErrors mode="Off" />
    **<globalization enableClientBasedCulture="true" culture="tr-TR" uiCulture="tr-TR" />**
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" />
    </authentication>

****

您能发布控制器操作代码吗?可能是i18n问题。因此,由于日期格式错误,无法转换日期。是否有关于调试i18n问题的指针?我几乎可以向您保证,这不是i18n问题,因为格式yyyy mm ddThh:mm:ss是国际公认的日期时间。这一点在DateTime.Parse处理DateTime的字符串表示的事实中得到了进一步的证明。发布HTML表单的代码(和/或提交机制)。我很确定这个问题有一个简单的解决方法:)如何防止冒号更改为%3?这可能就是不同之处。我正在序列化一个表单,而ReportDate是一个隐藏的输入字段。用我使用的表单代码更新了帖子。。。除了你在文章中看到的内容,我什么都不做,所以奇怪的是它不适合你…在文章中冒号改为%3并不重要,因为HTTP编码就是这样工作的。。。例如,URL中的空间变为%20。。。所以这不是你的问题。。。我猜你的问题可能是在实际的表单html代码中。啊,是的,我忘了它在模型绑定之前解码,所以HTTP编码不会是问题。我将与你的Occam打赌,我已经发布了我的表单和javascript,与你的表单和javascript完全相同。我可以确认它确实在我的问题的顶部张贴了字符串(使用Firebug和Fiddler,两者都会产生这种效果)。所有其他值都绑定到对象。
<% using (Html.BeginForm())
   { %>
    <%= Html.Hidden("ReportDate", "2010-08-09T00:00:00") %>
    <%= Html.TextBox("SampleText", "Save") %>
    <%= Html.TextBox("Id", "1") %>
    <input type="submit" />
<%} %>
<form id="testForm">
    <%= Html.Hidden("ReportDate", "2010-08-09T00:00:00") %>
    <%= Html.TextBox("SampleText", "Save") %>
    <%= Html.TextBox("Id", "1") %>
    <a href="#" id="submitform">Submit!</a>
</form>

<script type="text/javascript">
    $("#submitform").click(function () {
        $.post("/Home/Test2", $("#testForm").serialize());
    });

</script>
[HttpPost]
public ActionResult Test2(MyObject myObject) {
    return View();
}
<system.web>
    <customErrors mode="Off" />
    **<globalization enableClientBasedCulture="true" culture="tr-TR" uiCulture="tr-TR" />**
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" />
    </authentication>