0

フィールドが null の場合に現在の日付を設定する、日付フィールド用のエディター テンプレートがあります。

@model Nullable<DateTime>

@{
    var date = Model as DateTime?; // local reference to a DateTime? 

    if (!date.HasValue                     // check if it is not null 
        || date.Equals(default(DateTime))) // check if it is not default 01/01/0001
    {
        date = DateTime.Now;
    }

    @Html.TextBox("", String.Format("{0:d}", date.Value.ToShortDateString()), new { @class = "date" })
 }

このテンプレートを作成ビューのみに適用したいと考えています。

レコードを編集すると、日付が不明だったために意図的に null のままにしていたフィールドに、上記のコードによって現在の日付が入力されます。

これに対応するためにコードを修正できるかどうか疑問に思っていますか?

どんな助けでも大歓迎です。

4

1 に答える 1

2

これを行うにはいくつかの方法があります。

最初の方法は、ViewDataを介して次のようなフラグを渡すことです。

@Html.EditorFor(m => m.SomeDate, new { nowIfNull = true })

次に、テンプレートを更新します。

@model Nullable<DateTime>

@{
    var date = Model as DateTime?; // local reference to a DateTime? 

    if ((!date.HasValue                     // check if it is not null 
        || date.Equals(default(DateTime))) // check if it is not default 01/01/0001
        && ((bool?)ViewData["nowIfNull"] ?? false)) // check if it should set to now if null
    {
        date = DateTime.Now;
    }

    @Html.TextBox("", date == null ? String.Empty : String.Format("{0:d}", date.Value.ToShortDateString()), new { @class = "date" })
 }

もう1つの方法はDateTime.Now、新しいモデルを作成するときに、これをコントローラー(さらにはマッパー)でデフォルトにすることです。これにより、ビューではなくコントローラー/マッパーで、デフォルトが属する場所を設定する必要がなくなります。

于 2012-11-09T14:26:08.117 に答える