【发布时间】: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