为什么DisplayFormat DataFormatString不起作用?

Pro*_*ofK 26 asp.net-mvc data-annotations asp.net-mvc-4

我的视图模型中有一个属性如下:

[Editable(false)]
[Display(Name = "Date")]
[DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}", ApplyFormatInEditMode = true)]
public DateTime MovementDate { get; set; }
Run Code Online (Sandbox Code Playgroud)

然而是加价

<td>
    @Html.DisplayFor(modelItem => item.MovementDate)
</td>
Run Code Online (Sandbox Code Playgroud)

将日期值呈现为2013/05/15 12:00:00 AM.

我究竟做错了什么?我的模特:

public class WithDateModel
{
    [DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}")]
    public DateTime TheDate { get; set; }
    public WithDateModel()
    {
        TheDate = DateTime.Now;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的看法:

@model ParkPay.WebTests.Models.WithDateModel
@Html.DisplayFor(m => m.TheDate)
@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
Run Code Online (Sandbox Code Playgroud)

呈现的内容:

2013/05/25 02:23:37 AM
Run Code Online (Sandbox Code Playgroud)

use*_*625 38

如果你无法在模型上运行它,你可以在视图上尝试它.

@Html.TextBoxFor(m => m.ValidFrom, "{0:dd/MM/yyyy}", new {maxlength = 10})

  • 这个解决方案对我有用.另外,作为旁注,"TextBoxFor"中会忽略DisplayFormat. (27认同)
  • 在"TextBoxFor"中忽略DisplayFormat - 在这里需要爱微软的一致性:( (13认同)
  • 难道这不会被认为是"硬编码"吗?我正在使用`EditorFor()`而且它也没有用; 而且我真的不必"硬编码"它. (5认同)
  • @AdamTolley同意,完全反直觉 (2认同)
  • 显然,该属性适用于“@Html.EditorFor”,而不适用于其他助手。您可以使用 EditorFor 帮助器,并且始终可以使用 `@Html.EditorFor(x=&gt; x.MyProperty, new { htmlAttributes = new { @class = "MyCssClass" } })` 添加自定义类 (2认同)

Mat*_*ull 6

ApplyFormatInEditMode你设置的原因是[Editable(false)]什么?所有这些ApplyFormatInEditMode都是格式化日期,如果你在一个文本框或其他东西进行编辑,你可能不会因为前面提到的.

我能够使用以下内容正确显示日期:

[DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}")]
public DateTime Date 
{
    get
    {
        return DateTime.Now;
    }
    set
    {
        Date = DateTime.Now;
    }
}
Run Code Online (Sandbox Code Playgroud)

并在视图中(带有结果输出):

@Html.DisplayFor(x => x.Date)        // 2013/05/23
<br />
@Model.Date                          // 23/05/2013 09:57:56
<br />
@Html.DisplayFor(x => Model.Date)    // 2013/05/23
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • 在每个`DisplayFormat`属性上有一个多余的`ApplyFormatInEditMode`比在我添加或删除`[Editable(false)]`属性时必须添加或删除它要容易得多. (4认同)

Md.*_*mun 5

由于您要排除获得仅日期的时间:在模型: -

 [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy/MM/dd}"]
   public DateTime TheDate { get; set; }
Run Code Online (Sandbox Code Playgroud)

在意见: -

    @Html.DisplayFor(model=> model.TheDate)
    @Html.JQueryUI().DatepickerFor(model => model.TheDate)
Run Code Online (Sandbox Code Playgroud)

以下链接的教程可以帮助你.它对我有用.

http://ilyasmamunbd.blogspot.com/2014/02/jquery-ui-datepicker-popup-calendar.html