Asp.net mvc 为什么DisplayFormat DataFormatString不起作用?

Asp.net mvc 为什么DisplayFormat DataFormatString不起作用?,asp.net-mvc,asp.net-mvc-4,data-annotations,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.Mo

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

[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>
我的看法是:

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

2013/05/25 02:23:37 AM

如果设置了
[可编辑(false)]
,为什么要使用
ApplyFormatInEditMode
?如果您将日期放在文本框或用于编辑的内容中,则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

@型号日期//23/05/2013 09:57:56
@Html.DisplayFor(x=>Model.Date)//2013/05/23

希望这能有所帮助。

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

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

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

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

    @Html.DisplayFor(model=> model.TheDate)
    @Html.JQueryUI().DatepickerFor(model => model.TheDate)
以下链接的教程可能会对您有所帮助。它适合我

这项工作对我来说:

在模型中:

using System.ComponentModel.DataAnnotations;

namespace Athlete.Models
{
    public class Foo
    {

        [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
        public DateTime SignDate
        {
           get;
           set;
        }
    }
}
并且认为:

<td style="text-align:left;">@Html.DisplayFor(modelItem => item.SignDate)</td>
@Html.DisplayFor(modelItem=>item.SignDate)

在显示名称中需要变量名称:
[显示(名称=“MovementDate”)
公共日期时间MovementDate{get;set;}

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

在我的例子中,一个队友定义了一个全局显示模板(aka
~\Views\Shared\DisplayTemplates\DateTime.cshtml
),我没有意识到它优先于我的模型属性上的
[DisplayFormat(DataFormatString=“{0:yyyyy-MM-dd}”)]

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

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

您必须将类型注释为日期

[DataType(DataType.Date)]

我和一个日期选择器有类似的问题,它以错误的顺序显示日期。通过使用HTML5值字段修复了它。



是否只显示日期?
DateTime
结构是日期和时间的表达式。@MattSull87我很清楚DateTime结构包括时间。这正是我试图使用
DataFormatString
属性从格式化日期中排除时间的原因。您解决了问题吗?有什么帮助吗?它对我不起作用,因为我没有使用
@Html.DisplayFor()
。我在这里对此进行了评论,以防其他人也会犯同样的错误。使用[DataType(DataType.Date)]只返回DATETIME的日期部分。在每个
DisplayFormat
属性上都有多余的
ApplyFormatEditMode
要比在添加或删除
[Editable(false)]时添加或删除它容易得多
attribute。这个解决方案对我很有效。另外,顺便说一下,“TextBoxFor”中忽略了DisplayFormat。DisplayFormat在“TextBoxFor”中忽略了DisplayFormat-我很喜欢微软在这里的一致性:(@AdamTolley同意,完全违反直觉。但这本质上不是“硬编码”吗?我使用的是
EditorFor()
而且它也不起作用;我真的不想“硬编码”它。显然,该属性适用于
@Html.EditorFor
而不适用于其他帮助程序。您可以使用EditorFor帮助程序,并且可以始终使用
@Html.EditorFor(x=>x.MyProperty,new{htmlAttributes=new{@class=“MyCssClass”})
Setting
ApplyFormatInEditMode
为我做了这件事。此注释创建了一个HTML5日期输入,而不是一个文本框,它可能是也可能不是所需的结果。
// see ~\Views\Shared\DisplayTemplates\DateMyFormat.cshtml for formatting
[UIHint("DateMyFormat")]
public DateTime MovementDate { get; set; }
[DataType(DataType.Date)]
<input asp-for="From" type="text" class="pickadate picker__input" value="@Model?.From.ToString("MM/dd/yyyy")">