2013-03-06 51 views
1

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

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; } 
} 

这似乎并不像不寻常的方式来做到这一点。模板不应该能够处理创建新的不可空日期吗?

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

回答

0

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

另一种选择是为日期时间提供默认值,如果有合理的,基于其他数据或基于当前日期时间。例如,将ActiveDate默认为当前日期,以便默认情况下它现在开始处于活动状态。

否则第一个选项是最好的,因为你不希望提供一个荒谬的默认像1/1/0001

+0

所以,你要创建一个视图模型,然后使用,而不是自动生成的模型和CSHTML文件?我可以做到这一点,但我想看看自动生成的文件可以带我多远。 – 2013-03-06 22:49:59

+0

@JohnS首先复制模型类并从那里调整视图模型类。因此,在这种情况下,您的视图应该只改变顶部的'@ model'指向viewmodel,因为所有的字段名称将是相同的名称/类型。 – AaronLS 2013-03-06 23:08:02

相关问题