【问题标题】:How to bind a DateTime in a specific format in ASP.NET MVC 3 using @Html.DisplayFor(.....)?如何使用 @Html.DisplayFor(.....) 在 ASP.NET MVC 3 中以特定格式绑定 DateTime?
【发布时间】:2013-08-19 09:59:33
【问题描述】:

如何在 ASP.NET MVC 3 中使用 @Html.DisplayFor(.....)? 以特定格式呈现 DateTime 如果我的模型类中有 DateTime 类型的属性,我该如何以特定格式呈现它。

Data Annotation:
        [DisplayName("Created On")]
        [DataType(DataType.Date)]
        [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:d}")]
        public object CreatedOn { get; set; }

查看:

  @Html.DisplayFor(modelItem => item.CreatedOn)

它只显示mm/dd/yyyy 格式的日期,但我想要dd/mm/yyyy hh: mm:ssssmm/dd/yyyy hh: mm:ssss 这种格式。

【问题讨论】:

  • 我试过@Html.DisplayFor(modelItem => item.MyDateTime.ToLongDateString()),但它不起作用
  • 查看我的答案以获得替代解决方案

标签: asp.net-mvc asp.net-mvc-3


【解决方案1】:

如果您的要求只是以 dd/mm/yyyy hh: mm:ssss 的格式显示日期和时间,则无需使用 DisplayFor(),如下所示使用它显示日期和时间

 @item.CreatedOn

【讨论】:

    【解决方案2】:

    你可以使用DisplayFormat属性,见MSDN Ref

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

    【讨论】:

    • @PKKG 属性参数必须是常量。对于处理多种文化的应用程序,日期格式字符串不是恒定的。因此,这种使用属性的方法对于多文化应用来说并不是一个好的解决方案。
    • @PKKG 如果格式在模型中是硬编码的,或者如果应用程序仅针对“dd/MM/yyyy”设计,则该应用程序不是多文化的。我对“这不是多文化应用程序的好解决方案”的评论。这个解决方案仍然适用。
    • 停下来,奥利弗和PKKG,你们各自的想法都是正确的。让我们和平相处
    • @PKKG 和 Satpal 在这里都很友好,只是澄清我的观点 :)。不同之处在于,在我的示例中,可以将字符串替换为包含用户日期格式的变量,而使用属性参数则无法做到这一点。
    【解决方案3】:

    如果您想以特定格式呈现 DateTime,您可以使用 ToString() 呈现 DateTime 并传递您需要的格式字符串:

    @Model.DateField.ToString("dd/MM/yyyy")
    

    否则,@Html.DisplayFor(model => model.DateField) 将使用线程文化中定义的格式。

    可以在 web.config 文件中将线程的文化设置为自动使用客户端的文化(使用 Accept-Language 请求标头):

      <system.web>
        <globalization enableClientBasedCulture="true" />
      </system.web>
    

    【讨论】:

    • 显示错误,例如 ToString() 没有采用 1 个参数的重载方法
    • 从外观上看,您已将数据类型更改为对象,这应该是 DateTime。将其改回 DateTime,此错误应该停止。
    • 它不适合我的要求
    • 无论数据类型是对象还是日期时间,输出都没有变化
    • 您记得构建解决方案吗?
    【解决方案4】:

    您可以使用 ToString() 方法解决您的问题。

    Datevalue.ToString("dd.MM.yyyy");
    

    Datevalue.ToString("MM/dd/yyyy");
    

    【讨论】:

    • 显示错误,例如 ToString() 没有采用 1 个参数的重载方法
    • 那你的对象好像不是DateTime
    • 无论数据类型是对象还是日期时间,输出都没有变化
    • 请删除注释中的[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:d}")],然后重试。
    猜你喜欢
    • 2011-08-25
    • 2011-09-17
    • 2013-12-25
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多