编辑器模板不适用于DisplayFormat

Dis*_*ile 8 .net asp.net-mvc mvc-editor-templates asp.net-mvc-3

我正在尝试为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; }
}
Run Code Online (Sandbox Code Playgroud)

我的编辑器模板在/Views/Projects/EditorTemplates/DateTime.cshtml文件夹中

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

以下是将所有内容联系在一起的视图:

@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>
Run Code Online (Sandbox Code Playgroud)

当我这样的时候,我看到了约会的时间部分.当我删除编辑器模板然后它工作正常,只显示日期部分.当我有一个编辑模板时,为什么它似乎忽略了DisplayFormat?

Iva*_*tev 6

让我们先来看看你不使用模板时会发生什么.我添加了泛型类型,使其更加明确区别于什么.

@Html.TextBoxFor<Product>(product => product.StartDate)
Run Code Online (Sandbox Code Playgroud)

现在让我们看看你的模板编辑器:

@Html.TextBoxFor<DateTime?>(dateTime => dateTime)
Run Code Online (Sandbox Code Playgroud)

请注意区别?在后一种情况下,您只是处理DateTime实例,这意味着您正在丢失由模型属性定义的元数据.

通过使用模板,您就是负责处理元数据的模板,应该将模板提供给您的模板ViewData.ModelMetadata.*.例如,在您的情况下,您需要自己使用格式化日期ViewData.ModelMetadata.DisplayFormatString

  • `Html.TextBox("",ViewData.TemplateInfo.FormattedModelValue,new {@ class ="datepicker"})` - `""表示当前模型. (7认同)