【问题标题】:Assign format of DateTime with data annotations?使用数据注释分配 DateTime 的格式?
【发布时间】:2011-07-12 07:10:01
【问题描述】:

我的视图模型中有这个属性:

[DataType(DataType.DateTime)]
public DateTime? StartDate { get; set; }

如果我想显示日期,或者用日期填充文本框,我有这些:

<%: Model.StartDate %>

<%: Html.TextBoxFor(m => m.StartDate) %>

无论何时显示日期,都会显示为:01/01/2011 12:00:00 AM

但我只想显示 01/01/2011

有没有办法应用带有数据注释的显示格式?我不想去每个显示日期的实例,并添加一些代码来格式化它。

【问题讨论】:

标签: c# asp.net asp.net-mvc data-annotations


【解决方案1】:

尝试使用以下标记:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]

【讨论】:

  • 刚试了下,还是在TextBox中显示时间,什么时候才显示在页面上。
  • @Steven:如果你还没有删除[DataType(DataType.DateTime)],你可以试试吗?
  • DisplayFormat 仅适用于 EditorForDisplayFor 助手。
  • 很好的答案 - 我错过了“ApplyFormatInEditMode”参数。
  • 我可以通过 Html.TextBoxFor 中的格式参数来解决这个问题。通过将其设置为@Html.TextBoxFor(model =&gt; model.YOUR_DATE, "{0:MM/dd/yyyy}"),我能够获得要显示的日期。在这里找到这个 [stackoverflow.com/a/14529347/2938775].
【解决方案2】:

你试过了吗?

[DataType(DataType.Date)]

【讨论】:

  • 如果浏览器支持,这也将启用 HTML5 日期选择器支持。
【解决方案3】:

在 mvc 4 中,您可以使用 TextBoxFor.. 轻松做到这一点。

@Html.TextBoxFor(m => m.StartDate, "{0:MM/dd/yyyy}", new { @class = "form-control default-date-picker" })

因此,您不需要在模型或视图模型类中使用任何数据注释

【讨论】:

  • 是的,这些 DataAnnotations 非常适合 EditorFor 助手,但是,当使用 IEnumerable(Of Entity) 渲染自定义网格时,您必须使用 .TextBoxFor,这是我的问题。谢谢
【解决方案4】:

如果您的数据字段已经是 DateTime 数据类型,则不需要使用[DataType(DataType.Date)] 进行注释;只需使用:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]

在 jQuery 上,为你的日历使用 datepicker

    $(document).ready(function () {
        $('#StartDate').datepicker();
    });

在您的 HTML 上,使用 EditorFor 助手:

    @Html.EditorFor(model => model.StartDate)

【讨论】:

  • "如果您的数据字段已经是 DateTime 数据类型,则无需使用[DataType(DataType.Date)]" => 这很有帮助
  • 但是对于 web api,显示格式不强制 DataFormatString = "{0:MM/dd/yyyy}" (没有得到任何 400 甚至请求正文有其他格式,即 {"dob":"31/12/1990"}
【解决方案5】:

像这样应用 DataAnnotation:

[DisplayFormat(DataFormatString = "{0:MMM dd, yyyy}")]

【讨论】:

    【解决方案6】:

    使用这个,但它是一个完整的解决方案:

    [DataType(DataType.Date)]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
    

    【讨论】:

      【解决方案7】:

      使用 EditorFor 而不是 TextBoxFor

      【讨论】:

        【解决方案8】:

        评论后

                  // [DataType(DataType.DateTime)] 
        

        使用数据注释属性:

        [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
        

        以下链接的STEP-7可能对您有所帮助...

        http://ilyasmamunbd.blogspot.com/2014/12/jquery-datepicker-in-aspnet-mvc-5.html

        【讨论】:

          【解决方案9】:

          这对我有用

          [DataType(DataType.DateTime)]
          [DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]
          

          【讨论】:

            【解决方案10】:

            这是我最喜欢在模型中使用注释的方式:

            [DisplayFormat(DataFormatString = "{0:dd/MM/yyy}")]
            

            【讨论】:

              【解决方案11】:

              在创建模型时使用下面的代码设置您的属性我认为您的问题将得到解决..时间不会出现在数据库中。您不需要添加任何注释。

              private DateTime? dob;
                      public DateTime? DOB
                      {
                          get
                          {
                              if (dob != null)
                              {
                                  return dob.Value.Date;
                              }
                              else
                              {
                                  return null;
                              }
              
                          }
                          set { dob = value; }
                      }
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-02-07
                • 1970-01-01
                • 1970-01-01
                • 2018-11-13
                相关资源
                最近更新 更多