[asp.net-mvc]编辑模板不能与 DisplayFormat

发布时间: 2017/3/25 11:38:53
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我试图创建日期时间字段编辑器模板和它似乎并不尊重我的 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,当我有一个编辑器模板?

解决方法 1:

让我们首先看看会发生什么,当你不使用一个模板。我添加了泛型的类型,以使其更明确所不同的是。

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

现在让我们看看您的模板编辑器︰

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

请注意的区别吗?在后一种情况你只处理一个 DateTime 实例,这意味着你正在失去由模型的属性定义的元数据。

通过使用模板,你是一个负责处理的元数据,应该向您的模板中提供 ViewData.ModelMetadata.* 。例如你的情况你将需要自己设置日期的格式使用ViewData.ModelMetadata.DisplayFormatString

赞助商