c# - 如何在 ASP.NET Core 2.0、RAZOR Tag Helpers 中格式化日期、时间、数字

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

我在尝试使用 Razor Tag Helpers 格式化 ASP.NET MVC Core 2.0 应用程序中的日期时间和数字时遇到问题。

按照良好做法,我想在与表单 View 相关的数据模型中指定数据格式。

我的模型

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; }

View :

        <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)

1000.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 为现在,QUANTITY_K 为 1000。

因此,例如在新订单操作中,我希望表单 View 显示带时间的日期(仅限 mm:ss)和数量(带有千位分隔符)的格式化初始值。问题是我无法实现。

正如 Stephen Muecke 注意到当您在浏览器中和用户编辑一个值并留下输入时应用的格式是另一回事。 如果我使用连接到 QUANTITY 输入的 OnChange 事件的 Java Script 函数,我可以格式化并尝试将格式化的数字作为文本返回到输入。但在这种情况下:<< jquery.js:7592 指定值“3 000”不是有效数字。该值必须与以下正则表达式匹配:-?(\d+|\d+.\d+|.\d+)([eE][-+]?\d+)? >>

最佳答案

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

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

解决方案是在 View 中传递 @item.CreatedDate.Date.ToShortDateString(),现在在我希望显示有限日期信息的页面上使用我想要的格式 MM/DD/YYYY。 (“CreatedDate”是我的属性(property))。希望这能消除一些令人头疼的问题。

关于c# - 如何在 ASP.NET Core 2.0、RAZOR Tag Helpers 中格式化日期、时间、数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47700287/

相关文章:

c# - 如果在后台 Android Xamarin,获取通知消息以在前台显示我的应用程序

javascript - 将 javascript 对象中的数组传递给 mvc Controller

c# - 用另一个 MVC 填充控件

c# - 设计师问题 + Entity Framework (WPF MVVM)

c# - 在 Visual Studio 2015 中实现接口(interface)时自动用#region 包围生成的代码

c# - 样板代码替换——这段代码有什么不好的地方吗?

c# - 我的个人网站的 Paypal 捐赠按钮

.net - 我需要在 ASP.NET 中使用 AJAX 关心线程安全吗?

c# - 当我使用 ASP.NET MVC 5 在服务器上部署时出现 JSON 404 错误

c# - .NET Azure 数据库上传