我正在使用Entity Framework 4.0,并使用POCO对象。当我从数据库中填充POCO对象时,我将属性值转换为我自己的Domain对象,我们可以将其称为模型。
必然,我的Model的字段是否为Nullable取决于它在数据库中映射到的值是来自NULL还是NOT NULL列。我不会详细介绍,但值必须在DB中可以为空,因为用户可以在将对象发布到公共之前部分保存该对象的草稿。既然如此,我有几个可以为空的字段。所以让我们说我的模型看起来像:
public class MyModel
{
public int? Field1 {get; set; }
public DateTime? Field2 {get; set; }
public int Field3 {get; set; }
}
如果我在我的视图中使用此模型,并使用可空字段,我开始收到错误,告诉我我不能在各个地方使用可空属性作为值,例如HTML助手等。我可以说像{{1}但是,对于一个观点而言,这感觉很笨。
我考虑创建一个ViewModel对象,该对象继承自原始域对象,并且具有if (Model.MyBoolField.HasValue && Model.MyBoolField.Value) { // etc }
,我的可空字段的非可空版本,如果基本版本为null,则返回适当的值。如下所示:
new
我的问题是我并不总是知道要显示的好的“默认”值。如果我在基本值为null时在View Model的getter中抛出异常怎么办?那是不好的做法吗?
我基本上正在寻找有关如何处理模型中可空字段的最佳实践,尤其是在视图中显示时。
答案 0 :(得分:2)
如果您只需要在视图中显示这些字段,则无需指定或检查是否具有值。
在View文件中使用Model.Field1
就足够了。它很简单,不会显示任何内容,也不会抛出exception
。您可以随时使用??
设置默认值。
@(Model.Field1 ?? "There is nothing to see here")
答案 1 :(得分:0)
在大多数情况下,我使用“For”帮助程序,对于Nullable
值似乎没问题(PublishedCount
是可以为空的属性):
@Html.TextBoxFor(m => m.BillPull.PublishedCount, new { id="txtPublishedCount" })
@Html.ValidationMessageFor(m => m.BillPull.PublishedCount)
当我只需使用TextBox
时,我使用GetValueOrDefault
方法,使用框架提供的默认值:
@Html.TextBox("BillPull.AutoPublishDate", Model.BillPull.AutoPublishDate.GetValueOrDefault().ToString(dateFormat), new { id = "dtpAutoPublishDate" })
@Html.ValidationMessageFor(m => m.BillPull.AutoPublishDate)