我使用的是Entity Framework4.0,并使用了POCO对象。当我从DB填充POCO对象时,我将属性值转换为我自己的Domain对象,我们可以将其称为my Model。
当然,my Model的字段是否可以为空取决于它在数据库中映射到的值是否来自NULL列。我不会详细介绍,但是这些值在DB中必须是可以为空的,因为用户可以在将对象的草稿发布给公众之前部分地保存它。在这种情况下,我有几个可以为空的字段。假设我的模型是这样的:
public class MyModel
{
public int? Field1 {get; set; }
public DateTime? Field2 {get; set; }
public int Field3 {get; set; }
}如果我在我的视图中使用这个模型,加上可以为空的字段,我开始收到错误,告诉我不能在不同的地方使用可为空的属性作为值,比如helpers等。我可以说像if (Model.MyBoolField.HasValue && Model.MyBoolField.Value) { // etc }这样的东西,但对于视图来说,这感觉很笨重。
我考虑创建一个ViewModel对象,该对象继承自我的原始域对象,并且具有new,即我的可空字段的不可空版本,如果基本版本为空,这些字段将返回适当的值。所以就像这样:
public class MyViewModel : MyModel
{
public new int Field1
{
get { return base.Field1 ?? 7; }
}
public new DateTime Field2
{
get { return base.Field2 ?? DateTime.Now; }
}
}我的问题是,我并不总是知道一个好的“默认”值来显示。当基值为空时,如果我在View Model的getter中抛出一个异常怎么办?这是不是很糟糕的做法?
我基本上是在寻找一个关于如何在模型中处理可空字段的最佳实践,特别是在视图中显示时。
发布于 2013-01-18 08:54:00
如果您只需要在View中显示这些字段,则不需要指定或检查是否有值。
在视图文件中使用Model.Field1就足够了。它不会显示任何内容,也不会抛出exception。当有意义时,您始终可以使用??来设置默认值。
@(Model.Field1 ?? "There is nothing to see here")发布于 2013-01-18 09:04:46
在大多数情况下,我使用“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)https://stackoverflow.com/questions/14390711
复制相似问题