【问题标题】:Why is DisplayFormat DataFormatString not working?为什么 DisplayFormat DataFormatString 不起作用?
【发布时间】:2013-05-17 20:45:55
【问题描述】:

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

[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

【问题讨论】:

  • 您只想显示日期吗? DateTime 结构是日期和时间的表达式。
  • @MattSull87 我很清楚 DateTime 结构包括时间。这正是我尝试使用 DataFormatString 属性从格式化日期中排除时间的原因。
  • 您解决了问题吗?任何帮助的答案?
  • 它对我不起作用,因为我没有使用@Html.DisplayFor()。我在这里评论了这个,以防其他人会犯同样的错误。
  • 使用 [DataType(DataType.Date] 只返回 DATETIME 的 DATE 部分。

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


【解决方案1】:

如果你不能让它在模型上工作,你可以在视图上试试。

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

【讨论】:

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

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

我能够使用以下方法正确显示日期:

[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

希望这会有所帮助。

【讨论】:

  • 在每个DisplayFormat 属性上添加一个多余的ApplyFormatInEditMode 比添加或删除[Editable(false)] 属性时要添加或删除它要容易得多。
【解决方案3】:

由于您想排除获取 Only Date 的时间: 在模特:-

 [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

【讨论】:

  • 设置 ApplyFormatInEditMode 为我做了。
【解决方案4】:

您必须将类型注释为日期

[DataType(DataType.Date)]

【讨论】:

  • 此注释创建一个 HTML5 日期输入而不是一个文本框,这可能是也可能不是所需的结果。
【解决方案5】:

在我的例子中,一个队友定义了一个全局显示模板(又名~\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; }

【讨论】:

    【解决方案6】:

    这对我有用:

    在模型中:

    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>
    

    【讨论】:

      【解决方案7】:

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

      <input asp-for="From" type="text" class="pickadate picker__input" value="@Model?.From.ToString("MM/dd/yyyy")">
      

      【讨论】:

        【解决方案8】:

        您需要显示名称中的 var 名称:
        [显示(名称 = “运动日期”)]
        公共日期时间 MovementDate { 获取;放; }

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-02
          • 2023-03-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多