在EditorFor Razor View中将日期时间转换为毫秒

时间:2015-11-11 12:16:49

标签: c# asp.net-mvc razor

在我的模型中,我以毫秒为单位存储时间戳,如下所示:

public Nullable<long> timestamp { get; set; }

我希望用户以文本格式添加日期(稍后我可能会添加datetimepicker)并将其转换为毫秒。

这就是我的观点

    <div class="form-group">
        @Html.LabelFor(model => model.timestamp, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.timestamp, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.timestamp, "", new { @class = "text-danger" })
        </div>
    </div>

这显示了一个带有箭头的edittext,用于更改整数值(1,2,3 ...),因为我的字段类型很长。

我如何允许用户引入字符串而不是长字符串,例如“2015/11/11 18:14”并将其自动转换为毫秒以存储在我的时间戳长字段中?

2 个答案:

答案 0 :(得分:1)

这就是视图模型的用途。创建一个视图模型,其具有与datetime相同的属性和时间戳,而不是long。与你的观点绑定。然后在检索或发布时将其映射到您的数据模型,并将日期时间转换为服务器上的毫秒数(以及毫秒到日期时间)。

答案 1 :(得分:0)

您可以轻松地在时间戳中转换日期,例如here我认为这不是您的问题。

解决问题的快速而肮脏的方法是用Html.TextBox替换Html.EditorFor。 一种更好的方法是自定义编辑器模板,如here

最终解决方案是使用MVVM(Model-View-ViewModel)模式,该模式包括创建一个名为ViewModel的类,该类是传递给与Model不同的视图的模型。在控制器中,您可以管理ViewModel和Model之间的转换。我使用automapper库来简化转换。 Here一个例子