1

私はjquerydatepickerを使用しており、日付フィールド用のエディターテンプレートも作成しました。両方の私のコードを以下に示します。

$(document).ready(function () {
    $('.date').datepicker({ dateFormat: "dd/mm/yy"});
});

@model Nullable<DateTime>

 @{
    DateTime dt = DateTime.Now;
    if (Model != null)
    {
       dt  = (System.DateTime) Model;

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

何らかの理由で、現在の日付は一部のビューにのみ表示されます。その他の日付はnullとして表示されています01/01/0001。コードを確認して再確認しましたが、問題は見つかりませんでした。また、開発者ツールを使用して出力されたhtmlを確認しました。これは、現在の日付を表示するフィールドと表示しないフィールドで同じです。もちろん、値は別としてです。

他の誰かがこれを経験したかどうか疑問に思います。複数の日付フィールドがあるビューでのみ発生しているように見えます。

どんな助けでもいただければ幸いです。

4

2 に答える 2

1

私の最初の推測は、コールスタックのどこか上位に Nullable<DateTime> が Nullable<DateTime> ではないため、結果に表示されているデフォルト値が生成されていることです。

于 2012-11-07T17:22:58.407 に答える
1

ビューに表示される Date (一部) はnullではなく、 initialize のみnew DateTime()です。つまり、すでに値が01/01/0001に設定されています。ifしたがって、ステートメントでは null として評価されません。そのため、に変更されませんDateTime.Now

それを修正するには、この方法で if コードを変換するだけです

@{
    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("Name", String.Format("{0:d}", date.Value.ToShortDateString()), new { @class = "date" })
 }

これにより、渡された意味DateTimeのある値がレンダリングされます。それ以外の場合は、が使用されます。DateTime.Now

于 2012-11-07T19:13:52.960 に答える