C# 如何在ASP.NET Core 2.0 RAZOR标记帮助程序中格式化日期、时间、数字
我在尝试使用Razor标记助手在ASP.NET MVC Core 2.0应用程序中格式化日期时间和数字时遇到问题 按照良好的实践,我希望在与表单视图相关的数据模型中指定数据格式 我的模型C# 如何在ASP.NET Core 2.0 RAZOR标记帮助程序中格式化日期、时间、数字,c#,asp.net,asp.net-mvc,razor,asp.net-core-mvc,C#,Asp.net,Asp.net Mvc,Razor,Asp.net Core Mvc,我在尝试使用Razor标记助手在ASP.NET MVC Core 2.0应用程序中格式化日期时间和数字时遇到问题 按照良好的实践,我希望在与表单视图相关的数据模型中指定数据格式 我的模型 public class OrderFormModel { public bool IsEdit { get; set; } [Display(Name = "Order Time: ")] public DateTime ORDER_LOCAL_TIME { get; set; }
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>
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]在第一次呈现页面时应用该格式。同意,谢谢。
我有订单、本地时间和数量属性的初始值。DateTime=现在用于订单\本地\时间,1000用于数量\ K
例如,在新订单操作中,我希望表单视图显示带时间的日期(仅限mm:ss)和数量(带千个分隔符)的格式化初始值。问题是我不能做到这一点
正如Stephen Muecke注意到的,当用户在浏览器中编辑一个值并离开输入时应用的格式是另一回事。
如果我使用连接到QUANTITY input的OnChange事件的Java脚本函数,我可以格式化并尝试将格式化的数字作为文本返回到输入。但在这种情况下:>我在ASP.NET Core中工作,找到了一个解决这个问题的方法,这个方法断断续续地困扰了我一个星期(在我在这里或其他地方找到的任何论坛上都没有得到令我满意的解决。) 我不想编辑模型或控制器中的属性,因为我希望整个日期(带有时间戳)存储在数据库中 解决方案是在视图中传递
@item.CreatedDate.Date.ToSortDateString()
,现在在我希望显示有限日期信息的页面上传递我所需的格式MM/DD/yyyyy。(“CreatedDate”是我的财产)。希望这能解决一些头痛问题。.cshtml:
<input type="text" asp-for="Model.StartDate" class="form-control" data-provide="datepicker" data-date-autoclose="true" data-date-format="yyyy-mm-dd">
可能重复使用[DisplayFormat(DataFormatString=“{0:dd/MM/yy hh:MM}”,ApplyFormatInEditMode=true)]结果作为空输入MM/dd/yyyyyy--:-->[DisplayFormat]在首次呈现页面时应用格式-其服务器端代码。如果您希望在浏览器中应用格式,并且用户编辑值,则需要javascript(客户端代码)@Stephen Muecke谢谢您的评论,我已经更新了我的问题以澄清问题。AFAIK.NET内核中没有内置的客户端支持。我建议使用globalizejs作为JavaScript支持库来处理客户端输入验证。看见
<input type="text" asp-for="Model.StartDate" class="form-control" data-provide="datepicker" data-date-autoclose="true" data-date-format="yyyy-mm-dd">
[Display(Name = "Start Date")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
public DateTime? StartDate { get; set; }