.net – 编辑器模板不适用于DisplayFormat

前端之家收集整理的这篇文章主要介绍了.net – 编辑器模板不适用于DisplayFormat前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试为DateTime字段创建一个编辑器模板,它似乎不尊重我的DisplayFormat属性.

我的模特:

  1. public class Project
  2. {
  3. [Display(Name="Project Name")]
  4. [required]
  5. public string ProjectName { get; set; }
  6.  
  7. [Display(Name="Start Date")]
  8. [DisplayFormat(DataFormatString="{0:M/d/yyyy}",ApplyFormatInEditMode=true)]
  9. public DateTime? StartDate { get; set; }
  10. }

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

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

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

  1. @model Project
  2.  
  3. <fieldset>
  4. <legend>Project</legend>
  5.  
  6. <div class="editor-label">
  7. @Html.LabelFor(m => m.ProjectName)
  8. </div>
  9. <div class="editor-field">
  10. @Html.EditorFor(m => m.ProjectName)
  11. @Html.ValidationMessageFor(m => m.ProjectName)
  12. </div>
  13.  
  14. <div class="editor-label">
  15. @Html.LabelFor(m => m.StartDate)
  16. </div>
  17. <div class="editor-field">
  18. @Html.EditorFor(m => m.StartDate)
  19. @Html.ValidationMessageFor(m => m.StartDate)
  20. </div>
  21. </fieldset>

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

解决方法

我们先来看看你不使用模板时会发生什么.我添加了泛型类型,使其更加清晰,区别在于什么.
  1. @Html.TextBoxFor<Product>(product => product.StartDate)

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

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

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

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

猜你在找的asp.Net相关文章