【问题标题】:ASP.Net WebApi and KO Issue with DatesASP.Net WebApi 和 KO 日期问题
【发布时间】:2015-02-17 05:46:31
【问题描述】:

我在 ASP.Net MVC 应用程序中使用 EF,并且还使用 WebApi 来获取这样的元素:

[HttpGet]
    public Student GetStudent(int id)
    {
        return db.Students.AsNoTracking().FirstOrDefault(n => n.Student_ID == id);
    }

这一切都很好,我将它直接映射到 ko 以供使用。但是,当我绑定元素的任何 DateTime 属性的值时,即出生日期,我得到:1955-04-17T11:13:56。我不想更改每个日期的 web api 方法或模型,是否有 3rd 方库或淘汰函数可以处理来自 asp.net 的日期时间并更正输入值。

【问题讨论】:

  • 您必须将其重新映射到 Date 对象。
  • 你想在客户端得到什么? 1955-04-17T11:13:56 怎么了?
  • 有什么问题?这看起来像是一个有效的日期值。
  • 看看这个Scott Hanselman post
  • 您可以使用 Moment.js 进行日期格式设置。 momentjs.com

标签: c# asp.net asp.net-mvc knockout.js asp.net-web-api


【解决方案1】:

正如 Sridhar 在评论中建议的那样。您可以使用 moment.js 来实现这一点。

我在这里创建了一个示例小提琴 - http://jsfiddle.net/sherin81/ordwenj6/

淘汰码

function viewModel()
{
    var self = this;
    self.dateInput = ko.observable("1955-04-17T11:13:56");
    self.formattedDate = ko.computed(function(){
        var m = moment(self.dateInput());
        return m.format("DD-MM-YYYY");
    });
}

ko.applyBindings(new viewModel());

HTML

<input data-bind="value : dateInput" />
<br/>
<span data-bind="text : formattedDate()" />

为了演示,我使用输入字段中的值进行格式化。您可以修改代码以使用来自 webapi 的值并使用moment.js 对其进行格式化。

更新

要使用 ko 自定义绑定处理程序执行相同操作,请执行以下操作

ko.bindingHandlers.dateFormattedByMoment = {
    update: function (element, valueAccessor, allBindingsAccessor) {
        $(element).val(moment(valueAccessor()).format("DD-MM-YYYY"));
    }
};

HTML

<input id="customBinding" data-bind="dateFormattedByMoment : dateInput()" />

在这里工作 - http://jsfiddle.net/sherin81/ujh2cg73/

【讨论】:

  • 这确实需要在视图模型中的每个日期调用 moment 函数,这是我想要避免的。我假设我可以在淘汰赛自定义绑定中放置类似于上述内容的内容,因此我可以简单地拥有类似的内容:
  • 是的。这是可能的。您知道如何创建自定义绑定处理程序吗?如果是,则在绑定处理程序中添加两行代码。
  • 我有,但那是不久前的事了,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多