1

私のINV_Assetsモデルでは、次の日付フィールドが定義されています。

[DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
        public DateTime? acquired_date { get; set; }

        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
        public DateTime? disposed_date { get; set; }

        [Required]
        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
        public DateTime created_date { get; set; }

次に、私のEdit()見解では、form-groupこれらの Date 値ごとに次のように定義されています。

<div class="form-group">
        @*@Html.LabelFor(model => model.acquired_date, htmlAttributes: new { @class = "control-label col-md-2" })*@
        <span class="control-label col-md-2">Acquired Date:</span>
        <div class="col-md-10">
            @Html.EditorFor(model => model.acquired_date, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.acquired_date, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @*@Html.LabelFor(model => model.disposed_date, htmlAttributes: new { @class = "control-label col-md-2" })*@
        <span class="control-label col-md-2">Disposed Date:</span>
        <div class="col-md-10">
            @Html.EditorFor(model => model.disposed_date, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.disposed_date, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @*@Html.LabelFor(model => model.created_date, htmlAttributes: new { @class = "control-label col-md-2" })*@
        <span class="control-label col-md-2">Created Date:</span>
        <div class="col-md-10">
            @Html.EditorFor(model => model.created_date, new { htmlAttributes = new { @class = "form-control", @Value = Model.created_date.ToString("yyyy-MM-dd") } })
            @Html.ValidationMessageFor(model => model.created_date, "", new { @class = "text-danger" })
        </div>
    </div>

さてcreated_date、値がある場合、フォームを開くことができ、EditorFor値が適切に表示されます。ただし、EditorFor()foracquired_dateとは、データベースに値が保存されている場合でも、disposed_date常に表示されます。エディターにデータベースの値が に変更されている間にフォームが保存された場合。mm/dd/yyyymm/dd/yyyynull

acquired_dateand disposed_datewith (Ex.)@Value = Model.disposed_date.ToString("yyyy-MM-dd")にand with (例)を指定しようとするとhtmlAttribute、 both Model.acquired_date.ToString("yyyy-MM-dd")and Model.disposed_date.ToString("yyyy-MM-dd")flag as No overload method for 'ToString' takes 1 argument...?

誰かが私が間違っていることを見ることができますか?

Date理想的には、入力した値を、ユーザーが指定したものと保存時のEditorFor現在の値で保存したいと考えています。ユーザーがレコードを表示している場合は、値を形式でTime表示したいと思います。mm/dd/yyyyEditorFor

4

2 に答える 2

4

ここでいくつかのことが起こっています。EditorForまず、のタイプの入力を生成していると思いdateます。HTML5date入力タイプの場合、提供される値は ISO 形式 (YYYY-MM-DD) である必要があります。この形式でない場合は、値を指定しなかったものとして扱われます。投稿時に、これはデータベースに保存され、null 値になります。長くても短くても、表示形式を次のように変更する必要があります。

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

これは、オブジェクトの編集に使用されるクラスでこれを設定し、オブジェクトの表示に使用されるクラスで実際に必要な表示形式を設定できるため、ビューモデルが便利な場所です。

次に、日付プロパティは nullable です。ToStringそのため、それらから直接フォーマットを呼び出すことはできません。代わりに、次のようにする必要があります。

@Model.disposed_date.Value.ToString("MM/dd/yyyy")

ただし、値がnullの場合は失敗するため、ifブロックでラップすることにより、最初に値があることを常に確認する必要があります。

@if (Model.disposed_date.HasValue)
{
    ...
}

または三項を使用する:

@(Model.disposed_date.HasValue ? Model.disposed_date.Value.ToString("MM/dd/yyyy") : string.Empty)
于 2015-02-17T21:31:39.950 に答える