0

这有点奇怪……

在我的表单上,我有两个按钮(都是<input type="button" />)。按钮 1 (B1) 有一个onclick="update()"where 调用 Ajax 并填充了 Data 参数。第二个按钮 (B2) 使用老式提交。顺便说一句,两个按钮调用相同的控制器/动作。@Html.EditorFor(x => x.StartDate)按钮用于从字段(即 jquery datepicker)发回日期。

因此,为了说明,假设 StartDate = "30/09/2012" (dd/mm/yy)。

如果我单击 B1,则会调用 Ajax,并且所有数据都正确地通过 data 参数传递。此参数是来自 $("#form").serializeArray() 的 json。此调用跳过活页夹并直接调用指定的控制器/动作就像一个魅力。我的 StartDate 属性带有正确的日期。

但是,如果我单击 B2,默认行为会构建一个查询字符串,我的应用程序会崩溃。我构建了一个自定义日期活页夹来拦截和检查正在发生的事情,我注意到日期字符串是“2012 年 9 月 30 日”,并试图转换为使用 dd/mm 的我的文化 (pt-BR)。

再进一步,我发现问题出在我的提交事件上,因为它正在构建一个奇怪的查询字符串:

//../Action?StartDate=09%2F30%2F2011%2000%3A00%3A00

还有一件事:Datepicker、webconfig 和客户端浏览器都配置为相同的文化。

现在,我应该如何进行呢?我可以概括所有提交的日期将作为 mm/dd/yy 到达活页夹并强制我的自定义日期活页夹来管理它,还是我做错了什么而忘记配置某些东西?

谢谢!

4

1 回答 1

0

谷歌搜索后,我发现这篇精彩的文章解释了 Default Binder 的工作原理以及浏览器为什么将查询字符串创建为 dd/mm/yy。基本上,.NET 框架在查询字符串上使用 InvariantCulture。

http://weblogs.asp.net/melvynharbour/archive/2008/11/21/mvc-modelbinder-and-localization.aspx

如果您陷入文化问题,值得阅读这篇文章。

于 2012-09-25T19:24:25.650 回答