3

私はEntityFramework4.0を使用しており、POCOオブジェクトを使用しています。DBからPOCOオブジェクトにデータを入力するとき、プロパティ値を独自のドメインオブジェクトに変換します。これをモデルと呼ぶことができます。

必然的に、モデルのフィールドがNullableであるかどうかは、モデルがデータベースでマップする値がNULL列またはNOTNULL列のどちらからのものであるかによって異なります。詳細については説明しませんが、ユーザーはオブジェクトのドラフトを公開する前に部分的に保存できるため、DBでは値をnull許容にする必要があります。その場合、null許容のフィールドがいくつかあります。それで、私のモデルが次のようになっているとしましょう:

public class MyModel
{
   public int? Field1 {get; set; }
   public DateTime? Field2 {get; set; }
   public int Field3 {get; set; }
}

if (Model.MyBoolField.HasValue && Model.MyBoolField.Value) { // etc }null許容フィールドを備えたこのモデルをビューで使用すると、HTMLヘルパーなど、さまざまな場所でnull許容プロパティを値として使用できないというエラーが表示され始めます。見る。

元のドメインオブジェクトを継承しnew、ベースバージョンがnullの場合に適切な値を返すnull許容フィールドのnull許容バージョンを持たないViewModelオブジェクトを作成することを検討しました。だから次のようなもの:

public class MyViewModel : MyModel
{
   public new int Field1
   {
      get { return base.Field1 ?? 7; }
   }

   public new DateTime Field2
   {
      get { return base.Field2 ?? DateTime.Now; }
   }
}

これに関する私の問題は、表示するのに適した「デフォルト」値が常にわからないことです。基本値がnullのときにビューモデルのゲッターで例外をスローした場合はどうなりますか?それは悪い習慣ですか?

私は基本的に、特にビューに表示するときに、モデル内のnull許容フィールドを処理する方法に関するベストプラクティスを探しています。

4

2 に答える 2

2

これらのフィールドをビューに表示するだけであれば、値があるかどうかを指定または確認する必要はありません。

Model.Field1View ファイルで使用するだけで十分です。単純に何も表示せず、 . をスローしませんexception??意味がある場合は、常に を使用してデフォルトを設定できます。

@(Model.Field1 ?? "There is nothing to see here")
于 2013-01-18T00:53:59.843 に答える
0

ほとんどの場合、私は "For" ヘルパーを使用します。これは、Nullable値で問題ないようです (PublishedCountは null 許容プロパティです)。

@Html.TextBoxFor(m => m.BillPull.PublishedCount, new { id="txtPublishedCount" })
@Html.ValidationMessageFor(m => m.BillPull.PublishedCount)

just を使用する必要がある場合は、フレームワークが提供するデフォルト値でメソッドTextBoxを使用します。GetValueOrDefault

@Html.TextBox("BillPull.AutoPublishDate", Model.BillPull.AutoPublishDate.GetValueOrDefault().ToString(dateFormat), new { id = "dtpAutoPublishDate" })
@Html.ValidationMessageFor(m => m.BillPull.AutoPublishDate)
于 2013-01-18T01:04:45.803 に答える