将默认日期格式应用于ASP.NET MVC 3应用程序中的所有此类字段的最佳方法是什么?

Tat*_*die 7 asp.net-mvc date data-annotations

我的目标是:

  • 以格式 显示所有日期d MMM yyyy
    • 第一页加载时的默认值/现有值
    • 用户输入的任何内容,然后通过服务器往返
  • 添加class="behaviour-date-picker"到输入字段,以便我可以显示jQuery日期选择器
  • 建立在System.ComponentModel.DataAnnotations基础设施之上
  • 仍然显示错误的数据值,例如12 Joone 2010在服务器往返之后,带有相应的验证错误消息

这是一个示例模型:

public class DebugDatesStub
{
    [DataType(DataType.Date)]
    public DateTimeOffset Date { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

DisplayFormat属性不能解决我的场景,因为它不适用于往返值.(用户填写表单,提交表单,由于某些服务器端验证问题而返回相同的表单 - 日期仍以他们输入的原始格式显示,而不是重新格式化.)

Tat*_*die 0

使用以下命令在页面上呈现字段:

@Html.EditorFor(m => m.Date)
Run Code Online (Sandbox Code Playgroud)

在以下位置创建此代码~\Views\Shared\EditorTemplates\Date.cshtml

@using System.Globalization
@model DateTimeOffset?

@{
    var propertyState = ViewData.ModelState[ViewData.ModelMetadata.PropertyName];
    var displayValue =
        propertyState != null && propertyState.Errors.Any() ? propertyState.Value.AttemptedValue :
        ViewData.Model.HasValue ? string.Format("{0:d MMM yyyy}", ViewData.Model.Value) :
        string.Empty;

    ViewData.ModelState.SetModelValue(
        ViewData.ModelMetadata.PropertyName,
        new ValueProviderResult(displayValue, displayValue, CultureInfo.CurrentCulture));
}

@Html.TextBoxFor(m => m, new { @class = "behaviour-date-picker" })
Run Code Online (Sandbox Code Playgroud)