0

私のモデルには、日付プロパティを持つオブジェクトがあります...

    [Required(ErrorMessage="{0} is required")]
    [Display(Name="Donation date")]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
    public DateTime DonationDate { get; set; }

ビューにはそのためのエディターがあります....

  <div class="editor-label">
        @Html.LabelFor(model => model.Donation.DonationDate)
    </div>
    <div class="editor-field">
        @Html.TextBox("txtDate", Model.Donation.DonationDate.ToString("dd/MM/yyyy"), new { @class = "date"      })
        @Html.ValidationMessageFor(model => model.Donation.DonationDate)
    </div>

コントローラーはモデルを受け取るだけです...しかし、コントローラーでこれを実行して別のビューに渡すと...

ViewBag.Date = model.Donation.DonationDate;

日付が何に設定されていても、0001/1/1 12:00:00 AM に戻るたびに。何かご意見は?ありがとう!

言い忘れました...エディターフィールドでJQuery datepickerも使用しています:

    $('.date').attr("placeholder", "dd/mm/yy").datepicker({
        dateFormat: "dd/mm/yy",
        changeMonth: true,
        changeYear: true
    });
4

1 に答える 1

2

ビュー エンジンがフォーム フィールドに適切にラベルを付ける方法を認識できるように、 TextBoxForを使用できます(モデル バインダーがポストバック時に認識できるように)。

@Html.TextBoxFor(model => model.Donation.DonationDate, new { @class = "date" })

または、テキストボックスに手動で正しい名前を付けることもできます。それがどのように見えるのか正確にはわかりません...

アップデート

さて、気になるので調べてみました。ネストされたフィールドの命名規則では、ドット表記が使用されます。したがって、これを書くことができるはずです:

@Html.TextBox("Donation.DonationDate", Model.Donation.DonationDate.ToString("dd/MM/yyyy"), new { @class = "date" })

アップデート #2

を正しくフォーマットするには、モデルのDonationDateプロパティに属性を適用します。

[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode=true)]

これが機能するには、 TextBoxForの代わりに@Html.EditorForも使用する必要があります。

于 2012-05-07T04:19:11.510 に答える