8

DateTimeフィールドのエディターテンプレートを作成しようとしていますが、DisplayFormat属性を尊重していないようです。

私のモデル:

public class Project
{
    [Display(Name="Project Name")]
    [Required]
    public string ProjectName { get; set; }

    [Display(Name="Start Date")]
    [DisplayFormat(DataFormatString="{0:M/d/yyyy}", ApplyFormatInEditMode=true)]
    public DateTime? StartDate { get; set; }
}

/Views/Projects/EditorTemplates/DateTime.cshtmlフォルダー内のマイエディターテンプレート

@model DateTime?
@Html.TextBoxFor(m => Model, new { @class="datepicker" })

これがすべてを結び付けるビューです。

@model Project

<fieldset>
    <legend>Project</legend>

    <div class="editor-label">
        @Html.LabelFor(m => m.ProjectName)
    </div>
    <div class="editor-field">
        @Html.EditorFor(m => m.ProjectName)
        @Html.ValidationMessageFor(m => m.ProjectName)
    </div>

    <div class="editor-label">
        @Html.LabelFor(m => m.StartDate)
    </div>
    <div class="editor-field">
        @Html.EditorFor(m => m.StartDate)
        @Html.ValidationMessageFor(m => m.StartDate)
    </div>
</fieldset>

このようにすると、日付の時間部分が表示されます。エディターテンプレートを削除すると、正常に機能し、日付部分のみが表示されます。エディターテンプレートがあるのに、なぜDisplayFormatを無視しているように見えるのですか?

4

3 に答える 3

6

まず、テンプレートを使用しない場合に何が起こるかを見てみましょう。違いが何であるかをさらに明確にするために、ジェネリック型を追加しました。

@Html.TextBoxFor<Product>(product => product.StartDate)

次に、テンプレートエディタを見てみましょう。

@Html.TextBoxFor<DateTime?>(dateTime => dateTime)

違いに気づきましたか?後者の場合、単にDateTimeインスタンスを処理しているだけです。これは、モデルのプロパティで定義されたメタデータが失われていることを意味します。

テンプレートを使用することにより、メタデータを処理する責任があります。メタデータは、でテンプレートに提供する必要がありますViewData.ModelMetadata.*。たとえば、あなたの場合、あなたは自分で日付をフォーマットする必要がありますViewData.ModelMetadata.DisplayFormatString

于 2011-08-19T16:56:02.720 に答える
4

エディタテンプレートを次のように変更すると、DisplayFormatが適用されます。

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "datePicker" })

日付プロパティをHTML5に準拠させるには、DataType.Date属性をモデルプロパティに追加します。

[DataType(DataType.Date)]
[Display(Name="Start Date")]
[DisplayFormat(DataFormatString="{0:M/d/yyyy}", ApplyFormatInEditMode=true)]
public DateTime? StartDate { get; set; }

そして、/ Views / Projects / EditorTemplates/Date.cshtmlに日付のエディターテンプレートを追加します。

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "datePicker", type = "date" })
于 2012-08-22T14:54:03.730 に答える
0

への変更@Html.TextBoxFor(m => m, new { @class="datepicker" })

于 2011-08-19T17:43:54.783 に答える