如何格式化ASP.NET Core 2.0中的日期,时间,数字,RAZOR标记助手

时间:2017-12-07 17:10:58

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

我在尝试使用Razor Tag Helpers在ASP.NET MVC Core 2.0 App中格式化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。

因此,例如在New Order Action上,我希望Form View显示Date with Time(mm:ss only)和Quantity(带千位分隔符)的格式化初始值。问题是我无法做到这一点。

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

2 个答案:

答案 0 :(得分:1)

我正在ASP.NET Core中工作,并且找到了解决这个问题的方法,这个问题困扰了我一个星期(在这里或其他地方找到的任何论坛中,都没有得到满意的解决)。< / p>

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

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

答案 1 :(得分:0)

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