让我们做出以下假设;ASP.NET MVC 3 Razor C#,一个绑定到视图模型(不是实体等)的强类型视图,使用 Html.EditorFor 方法在视图模型中编辑可为空的 DateTime 属性。我添加的两个数据注释属性似乎导致模型绑定失败。
示例视图代码
@model MyApp.ViewModels.NullableDateTimeViewModel
@using (Html.BeginForm())
{
@Html.EditorFor(m => m.DateOfBirth)
}
示例 ViewModel 代码
[DataType(DataType.Date,
ErrorMessage = "Please enter a valid date in the format dd MMM yyyy")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd MMM yyyy}")]
public class NullableDateTimeViewModel
{
public DateTime? DateOfBirth { get; set; }
}
示例控制器代码
[HttpPost]
public ViewResult DoB(NullableDateTimeViewModel nullableDateTimeVM)
{
ContextDB db = new ContextDB();
Customer cust = new Customer();
// DateOfBirth is null so the update fails
cust.DateOfBirth = nullableDateTimeVM.DateOfBirth.Value;
db.Customers.Add(cust);
db.SaveChanges();
}
添加数据注释属性时,提交视图中的表单时,视图中输入的数据不会回传到控制器。这意味着将 EditorFor 与这些属性一起使用时模型绑定失败。模型绑定适用于 TextBoxFor,在 TextBoxFor 输入框中输入的值将通过视图模型传递回视图。EditorFor 和数据注释验证属性有什么问题?
我们能否找到一个不涉及通过创建多个额外的类、助手、模板和编写大量额外代码来重新发明轮子的解决方案?我正在寻找一两条线解决方案。