为什么DisplayFormat DataFormatString不起作用?

时间:2013-05-22 17:15:46

标签: asp.net-mvc asp.net-mvc-4 data-annotations

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

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

然而是标记

<td>
    @Html.DisplayFor(modelItem => item.MovementDate)
</td>

将日期值呈现为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;
    }
}

我的观点:

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

呈现的内容:

2013/05/25 02:23:37 AM

7 个答案:

答案 0 :(得分:37)

如果你无法在模型上使用它,你可以在视图上尝试它。

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

答案 1 :(得分:6)

如果您设置ApplyFormatInEditMode,为什么使用[Editable(false)]?所有ApplyFormatInEditMode都会格式化日期,如果您将其放在文本框中或需要编辑的内容中,由于上述原因,您可能不会这样做。

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

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

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

@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

希望这有帮助。

答案 2 :(得分:5)

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

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

观点: -

    @Html.DisplayFor(model=> model.TheDate)
    @Html.JQueryUI().DatepickerFor(model => model.TheDate)

以下链接的教程可能对您有所帮助。它对我有用。

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

答案 3 :(得分:1)

您必须将类型注释为日期

[DataType(DataType.Date)]

答案 4 :(得分:0)

在我的情况下,队友定义了一个全局显示模板(又名~\Views\Shared\DisplayTemplates\DateTime.cshtml),我没有意识到我的模型属性优先于[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}")]

解决方案是将我的格式字符串移动到新的共享模板,因此属性更改为:

// see ~\Views\Shared\DisplayTemplates\DateMyFormat.cshtml for formatting
[UIHint("DateMyFormat")]
public DateTime MovementDate { get; set; }

答案 5 :(得分:0)

我在使用日期选择器时遇到了类似的问题,该日期显示器以错误的顺序显示日期。通过使用HTML 5值字段对其进行了修复。 https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/date

tee

答案 6 :(得分:-3)

您需要显示名称中的var名称:
[显示(姓名=&#34; MovementDate &#34;)]
public DateTime MovementDate {get;组; }

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