在回发验证期间,我在使用 Datetime 属性上的 DisplayFormat 属性时遇到问题。
需要明确的是,这不是主要问题,但我想了解一种无需“破解”即可使其正常工作的方法,或者只是讨论这一点(如果这是“正常”行为)。
让我们承认我在 DB 中有一些日期时间(例如 10/17/2014 12:00:00 AM)以表格形式显示。我正在使用DataType(Datatype.Date)
andDisplayFormat(...)
属性,但是当我回发表单时,由于 Datetime 格式,我的 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 问题的帖子,但配置中没有任何内容像我得到的那样简单,所以我对我所缺少的东西全心全意