MVC自动生成创建页面,日期抛出所需的非空项目

时间:2013-03-06 22:43:03

标签: asp.net-mvc entity-framework

我有一个带有不可为空的日期字段的简单表。该字段在数据库中具有默认值GetDate()。 数据库表通过EntityFramework提出, 当我让MVC 4模板为该表自动生成一个create.cshtml页面时,它可以工作但是当我尝试运行该表时,我得到错误: 传入字典的模型项为null,但此字典需要“System.DateTime”类型的非null模型项。

CSHTML文件:

@model MyModel.Content
<div class="editor-label">
        @Html.LabelFor(model => model.ActiveDate)
    </div>      
    <div class="editor-field">
        @Html.EditorFor(model => model.ActiveDate)
        @Html.ValidationMessageFor(model => model.ActiveDate)
    </div>

EF自动生成的课程:

public partial class Content
{
    public int ID { get; set; }
    public string Title { get; set; }
    public int CategoryID { get; set; }
    public string Content1 { get; set; }
    public bool IsActive { get; set; }
    public System.DateTime ActiveDate { get; set; }
    public System.DateTime DeactiveDate { get; set; }
    public System.DateTime LastEditDate { get; set; }
    public string LastEditor { get; set; }

    public virtual ContentCategory ContentCategory { get; set; }
}

这似乎不是一种不寻常的方法。模板是否应该能够处理创建新的不可为空的日期?

我该怎样做才能解决这个问题?

1 个答案:

答案 0 :(得分:0)

我处理这个的方法是在我的viewmodel上使用可以为空的DateTimes并在它们上设置[Required]属性,这样如果模型验证,那么我可以保证何时将值复制到我的实体模型并保存数据,然后它会成功。这样,您可以将实体模型(保存到数据库中的内容)保留为非空日期时间。

另一个选项是根据其他数据或基于当前日期时间提供日期时间的默认值。例如,将ActiveDate默认为当前日期,因此默认情况下它现在开始处于活动状态。

否则第一个选项是最好的,因为你不想提供一个无意义的默认值,如1/1/0001