首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ViewModel屏蔽可为空的域属性

使用ViewModel屏蔽可为空的域属性
EN

Stack Overflow用户
提问于 2013-01-18 08:39:46
回答 2查看 1.2K关注 0票数 3

我使用的是Entity Framework4.0,并使用了POCO对象。当我从DB填充POCO对象时,我将属性值转换为我自己的Domain对象,我们可以将其称为my Model。

当然,my Model的字段是否可以为空取决于它在数据库中映射到的值是否来自NULL列。我不会详细介绍,但是这些值在DB中必须是可以为空的,因为用户可以在将对象的草稿发布给公众之前部分地保存它。在这种情况下,我有几个可以为空的字段。假设我的模型是这样的:

代码语言:javascript
复制
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,即我的可空字段的不可空版本,如果基本版本为空,这些字段将返回适当的值。所以就像这样:

代码语言:javascript
复制
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中抛出一个异常怎么办?这是不是很糟糕的做法?

我基本上是在寻找一个关于如何在模型中处理可空字段的最佳实践,特别是在视图中显示时。

EN

回答 2

Stack Overflow用户

发布于 2013-01-18 08:54:00

如果您只需要在View中显示这些字段,则不需要指定或检查是否有值。

在视图文件中使用Model.Field1就足够了。它不会显示任何内容,也不会抛出exception。当有意义时,您始终可以使用??来设置默认值。

代码语言:javascript
复制
@(Model.Field1 ?? "There is nothing to see here")
票数 2
EN

Stack Overflow用户

发布于 2013-01-18 09:04:46

在大多数情况下,我使用“Nullable”帮助器,它似乎可以用于空值(PublishedCount是一个可以为空的属性):

代码语言:javascript
复制
@Html.TextBoxFor(m => m.BillPull.PublishedCount, new { id="txtPublishedCount" })
@Html.ValidationMessageFor(m => m.BillPull.PublishedCount)

当我只需要使用TextBox时,我使用GetValueOrDefault方法,使用框架提供的任何默认值:

代码语言:javascript
复制
@Html.TextBox("BillPull.AutoPublishDate", Model.BillPull.AutoPublishDate.GetValueOrDefault().ToString(dateFormat), new { id = "dtpAutoPublishDate" })
@Html.ValidationMessageFor(m => m.BillPull.AutoPublishDate)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14390711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档