浏览器构建错误的查询字符串

时间:2012-09-25 17:24:36

标签: jquery asp.net-mvc-3 webforms model-binding cultureinfo

这有点怪异......

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

因此,为了说明,我们可以说StartDate =“30/09/2012”(年/月/日)。

如果单击B1,则调用Ajax并正确传递所有数据通过数据参数。此参数是来自$(“#form”)。serializeArray()的json。此调用会跳过绑定器并直接调用指定的控制器/操作,就像魅力一样。我的StartDate属性带有正确的日期。

但是如果我点击B2,默认行为会构建一个查询字符串,我的应用程序崩溃了。我建立了一个自定义日期绑定器来拦截和检查发生了什么,我注意到日期字符串是“09/30/2012”并试图转换为我的文化(pt-BR),它使用dd / mm。

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

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

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

现在,我该如何处理?我可以概括一下,提交的所有日期都会以mm / dd / yy的形式到达活页夹,并强制我的自定义日期活页夹来管理它,或者我做错了什么并忘记配置某些内容?

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

如果你遇到文化问题,请阅读这篇文章。