Html.EditorFor可以为null的DateTime从视图回发为null

时间:2012-02-02 17:52:30

标签: asp.net-mvc-3 c#-4.0 post null editorfor

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

我们能不能通过创建多个附加类,帮助程序,模板和编写大量附加代码来找到一个不涉及重新发明轮子的解决方案?我正在寻找一两行解决方案。

0 个答案:

没有答案