3

让我们做出以下假设;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 和数据注释验证属性有什么问题?

我们能否找到一个不涉及通过创建多个额外的类、助手、模板和编写大量额外代码来重新发明轮子的解决方案?我正在寻找一两条线解决方案。

4

0 回答 0