【问题标题】:How to format Date, Time, Number in ASP.NET Core 2.0, RAZOR Tag Helpers如何在 ASP.NET Core 2.0 中格式化日期、时间、数字,RAZOR Tag Helpers
【发布时间】:2018-05-21 20:51:12
【问题描述】:

我在尝试使用 Razor Tag Helpers 在 ASP.NET MVC Core 2.0 应用程序中格式化 DateTime 和 Numbers 时遇到问题。

遵循良好实践,我想在与表单视图相关的数据模型中指定数据格式。

我的模特

public class OrderFormModel
{
    public bool IsEdit { get; set; }

    [Display(Name = "Order Time: ")]
    public DateTime ORDER_LOCAL_TIME { get; set; }

    [Display(Name = "Order Qty (K): ")]
    public int QUANTITY_K { get; set; }

观点:

        <div class="form-group col-md-9">
            <label asp-for="ORDER_LOCAL_TIME"></label>
            <input asp-for="ORDER_LOCAL_TIME" class="form-control" />
            <span asp-validation-for="ORDER_LOCAL_TIME" class="text-danger"></span>
        </div>
        <div class="form-group col-md-6">
            <label asp-for="QUANTITY_K"></label>
            <input asp-for="QUANTITY_K" min="1" class="form-control" style="text-align:right" />
            <span asp-validation-for="QUANTITY_K" class="text-danger"></span>
        </div>

所需的格式是

12/12/2017 12:23 (can be separated in to two fields as workaround)

1 000.145

我尝试了很多选项,但没有一个有效。 对于数字输入,我想当用户输入值并离开输入时,要应用的格式。

我一直在尝试:

 [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy hh:mm}")]
  (not applied at all)

 [DisplayFormat(DataFormatString = "{0:N3}")]
  (not applied at all)

 [DataType(DataType.Time)]
  (applied but seconds, milliseconds and AM/PM present)

 [DataType(DataType.Date)]
  (works for date only field)

我们非常感谢您的帮助。谢谢。

更新

正如 Stephen Muecke 所指出的,[DisplayFormat] 在页面首次呈现时应用该格式。同意,谢谢。 我有 ORDER_LOCAL_TIME 和 QUANTITY_K 属性的初始值。 DateTime = 现在为 ORDER_LOCAL_TIME 和 1000 为 QUANTITY_K。

例如,在新订单操作中,我希望表单视图显示带时间的日期(仅限 mm:ss)和数量(带千位分隔符)的格式化初始值。问题是我做不到。

Stephen Muecke 注意到当您在浏览器中和用户编辑一个值并离开输入时应用的格式是另一回事。 如果我使用连接到 QUANTITY 输入的 OnChange 事件的 Java Script 函数,我可以格式化并尝试将格式化的数字作为文本返回到输入。但在这种情况下: >

【问题讨论】:

  • 使用 [DisplayFormat(DataFormatString = "{0: dd/MM/yy hh:mm}", ApplyFormatInEditMode = true)] 结果为空输入 mm/dd/yyyy --:--:- -
  • [DisplayFormat] 在页面首次呈现时应用格式 - 它的服务器端代码。如果您希望在浏览器中和用户编辑值时应用格式,则需要 javascript(客户端代码)
  • @Stephen Muecke 感谢您的评论,我已更新我的问题以澄清此案。
  • AFAIK 在 .NET Core 中没有内置的客户端支持。我建议使用 globalizejs 作为 JavaScript 支持库来处理客户端输入验证。见github.com/globalizejs/globalize

标签: c# asp.net asp.net-mvc razor asp.net-core-mvc


【解决方案1】:

我在 ASP.NET Core 中工作,并找到了一个解决这个问题的方法,这个问题让我断断续续地困惑了一周(并且在我在这里或其他地方找到的任何论坛中都没有得到满意的解决。)

我不想编辑模型或控制器中的属性,因为我希望将整个日期(带时间戳)存储在数据库中。

解决方案是在视图中传递@item.CreatedDate.Date.ToShortDateString(),现在我希望在我希望显示有限日期信息的页面上采用我想要的格式 MM/DD/YYYY。 (“CreatedDate”是我的财产)。希望这能解决一些头疼的问题。

【讨论】:

    【解决方案2】:

    .cshtml:

    <input type="text" asp-for="Model.StartDate" class="form-control" data-provide="datepicker" data-date-autoclose="true" data-date-format="yyyy-mm-dd">
    

    .cs:

    [Display(Name = "Start Date")]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
    public DateTime? StartDate { get; set; }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-09
      • 2012-05-17
      • 2016-11-17
      • 1970-01-01
      • 1970-01-01
      • 2012-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多