【发布时间】:2015-08-09 18:24:41
【问题描述】:
在回发验证期间,我在使用 Datetime 属性的 DisplayFormat 属性时遇到问题。
要明确这不是主要问题,但我想了解一种无需“破解”即可使其正常工作的方法,或者只是讨论这一点(如果这是“正常”行为)。
让我们承认我在 DB 中有一些日期时间(例如 10/17/2014 12:00:00 AM)以表格形式显示。我正在使用 DataType(Datatype.Date) 和 DisplayFormat(...) 属性,但是当我发回我的表单时,由于日期时间格式,我的 ModelState 无效。
--MyModel 类文件(.cs)
namespace Package.To.Models {
public class MyModel
{
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0: dd/MM/yyyy}", ApplyFormatInEditMode = true]
public Datetime myDate { get; set; }
...other properties
}
}
--cshtml文件
@model Package.To.Models.MyModel
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<div class="editor-label">
@Html.LabelFor(model => model.myDate)
</div>
<div class="editor-field">
<!-- displayed with the good format eg. 17/10/2014 -->
@Html.EditorFor(model => model.myDate)
</div>
<input type="submit" value="Ok" class="button"/>
</fieldset>
}
--控制器文件(.cs)
[HttpPost]
public ActionResult calledWhenSubmit(MyModel model)
{
// invalid model.myDate: 1/1/0001 12:00:00 AM
var errors = ModelState
.Where(x => x.Value.Errors.Count > 0)
.Select(x => new { x.Key, x.Value.Errors })
.ToArray();
// errors.Errors[0].ErrorMessage: "The value '17/10/2014' is not valid for myDate"
// errors.Errors[0].Exception._COMPlusExceptionCode: -532462766
if (ModelState.IsValid) // returning false
{
...some code
}
return View();
}
看来,如果我删除 DisplayFormat(...) 属性一切正常(除了显示的日期在表单中的格式错误)。
我在 SO 上发现了很多关于 Datetime 和 ModelState 问题的帖子,但配置中没有任何内容像我得到的那样简单,所以我对我所缺少的东西都很了解
【问题讨论】:
-
您是否在
web.config文件中设置了文化(即<globalization uiCulture="en" culture="en-US" />)? -
您是否在配置中将文化设置为 en-Gb?
-
不,我没有在任何地方设置文化
-
尝试一下,如果它有效,请告诉我们
-
它没有改变任何东西,同样的错误
标签: c# asp.net-mvc-4 datetime modelstate displayformat