我有这个应用程序,默认日期格式必须是dd/MM/yyyy
(语言是巴西葡萄牙语)。
我已经将文化和UI文化设置为pt-BR
,现在myDate.ToShortDateString()
会根据需要返回日期。我毫不费力地展示它们。
问题是,当用户使用诸如17/08/2011
之类的日期填充输入字段并将表单提交给我的操作时,DateTime参数变为null。如果我提供08/17/2011
格式的日期,则可以正常使用。
如何使ASP.Net MVC模型绑定以正确解析我的日期?
答案 0 :(得分:10)
我发现了什么。我的表单是通过GET
方法发布的,MVC只是在RouteData
传递时使用文化作为参数,或者通过POST
方法传递给表格。
我刚刚将表单更改为POST
方法,但它确实有效。
答案 1 :(得分:5)
在视图模型中的属性上尝试此操作:
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
答案 2 :(得分:2)
我很确定问题是你的DateTime类型缺少DateTimeFormat。
<input type="text" name="DateProperty" id="DateProperty"
value="@(Model.DateProperty.Value.ToString("d",
System.Threading.Thread.CurrentThread.CurrentUICulture.DateTimeFormat))" />
编辑**
您想要确定的另一件事是输入元素的“name”属性与您传递给操作的内容相匹配。如果它不为null,则每次都会出现在POST操作上。
[HttpPost] public ActionResult DoStuff(string dateParam) { return RedirectToAction("Home","Index", new { }); }
“dateParam”应与此处的name属性匹配。
<input id="dateParam" name="dateParam" value="10/10/2010" />