1

我有一个带有不可为空日期字段的简单表。该字段在 DB 中具有默认值 GetDate()。DB 表是通过 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; }
}

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

我必须做些什么来解决这个问题?

4

1 回答 1

0

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

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

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

于 2013-03-06T22:45:39.787 回答