当前位置: 首页 > 面试题库 >

使用Asp.Net MVC和KnockoutJS处理日期

韩嘉胜
2023-03-14
问题内容

我最近开始使用KnockoutJs,并很快意识到使用默认Json(myModelWithADate)结果生成默认的json编码。\/Date(-62135578800000)\/
经过一些研究,我找到了四种可能的方式来处理dom元素中日期的显示。

1)创建一个绑定,以处理从Json日期到所需格式的转换

ko.bindingHandlers.date = {
    init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
        var jsonDate = valueAccessor();
        var value = new Date(parseInt(jsonDate.substr(6)));
        var ret = value.getMonth() + 1 + "/" + value.getDate() + "/" + value.getFullYear();
        element.innerHTML = ret;
    },
    update: function(element, valueAccessor, allBindingsAccessor, viewModel) {

    }
};

用法

<td data-bind="date: DueDate">
</td>

2)从控制器返回“字符串”

return Json(new {MyDate = DateTime.Now.ToShortDateString()});

3)使用JSON.NET指定在
james.newtonking.com上
看到的日期时间格式

string isoJson = JsonConvert.SerializeObject(entry, new IsoDateTimeConverter());
// {"Details":"Application started.","LogDate":"2009-02-15T00:00:00Z"}

4)使用JSON.parse处理日期

JSON.parse(jsonText, function(key, value) {
    // Check for the /Date(x)/ pattern
    var match = /\/Date\((\d+)\)\//.exec(value);
    if (match) {
        var date = new Date(+match[1]); // Convert the ticks to a Date object
        return humanReadable(date); // Format the date how you want it
    }

    // Not a date, so return the original value
    return value;
});

它们似乎都可以工作,但是我仍然在为自己感到“正确”而苦苦挣扎。现在,我的直觉正在与绑定和返回字符串混合使用。如我所见,我扩展了绑定以使用jQuery UI
datepicker控件处理输入。

处理显示日期或其他类型(例如货币)时,是否存在公认的惯例? 我还有另一个解决这个问题的选择吗?


问题答案:

我个人认为JSON.NET解决方案是最好的,因为它对客户端的影响更少。所有其他解决方案都需要其他客户端解析或其他客户端代码。

我已经将所有使用JSON的ASP .NET代码切换为使用JSON.NET,因为它的可定制性强得多。

例如,我必须在MVC中实现符合Google Chart
API
(与Knockout结合使用以进行分页等)的JSON数据,默认情况下JavascriptSerializer根本无法做到这一点。

除了JSON.NET,您还可以对其进行自定义,以实际吐出完整的Knockout视图模型,因此您甚至不需要使用映射插件。

我编写了一个名为FluentJson.NET的示例库,该库可让您在Razor中执行以下操作:

var viewModel = @JsonObject.Create()
    .AddProperty("name", "value")
    .AddObservable("knockoutProperty", 123)

得到:

var viewModel = {"name":"value","knockoutProperty":ko.observable(123)}

因此,您可以获得无需任何客户端环就能跳过去的Knockout视图模型。

您可以轻松地扩展类似的方法来处理日期值,但是您更愿意。



 类似资料:
  • 我正在尝试处理错误并为404,403等显示适当的页面。 为此,我制作了一个错误处理过滤器,它可以像预期的那样工作。也就是说,当我试图要求 mysite.com/Home/random_non-existent_action 用户被重定向到我的自定义404页面,并作为响应代码返回404。这同样适用于401和403。 我已经通过错误处理过滤器和在web上进行的修改实现了这一点。配置为: 这就是问题开始

  • 使用DateTime 类。 在 PHP 糟糕的老时光里,我们必须使用 date(), gmdate(), date_timezone_set(), strtotime()等等令人迷惑的 组合来处理日期和时间。悲哀的是现在你仍旧会找到很多在线教程在讲述这些不易使用的老式函数。 幸运的是,我们正在讨论的 PHP 版本包含友好得多的 DateTime 类。 该类封装了老式日期函数所有功能,甚至更多,在一

  • 11.1 日志项处理和失败 一个常见的用例是需要在一个步骤中特殊处理错误,chunk-oriented步骤(从创建工厂bean的这个步骤)允许用户实现一个简单的ItemReadListener用例,用来监听读入错误,和一个ItemWriteListener,用来监听写出错误.下面的代码片段说明一个监听器监听失败日志的读写: >public class ItemFailureLoggerListen

  • 您能帮助我在Spring Data Mongodb中使用@Query查找使用日期的数据吗? 我在下面提供了我的代码: 存储库类: ServiceImpl类: RestController类: Mongo数据库内的数据供客户收集: 如果我用日期字符串“2016-07-19T14:38:54.439Z”调用下面的URL,即使数据库中没有2016-07-19之后创建的记录,它仍然会返回2个结果(以上2个

  • 问题内容: 我有一个来自我的应用程序的时间戳值。用户可以在任何给定的本地TimeZone中。 由于此日期用于假定给定时间始终为格林尼治标准时间的Web服务,因此我需要将用户的参数从(EST)转换为(GMT)。这是一个关键点:用户忽略了自己的TZ。他输入了要发送给WS的创建日期,所以我需要的是: 用户输入: 2008年5月1日下午6:12(美国东部标准时间) WS的参数必须为:2008年5月1日下午

  • 主要内容:1 局部处理日期,2 全局处理日期Fastjson默认情况下对日期格式是没有做格式化处理的,默认输出日期的毫秒数。如下: 运行结果为: 如果希望对日期进行格式化输出,可以使用以下方式进行。 1 局部处理日期 局部处理日期,是指可以把toJSONString() 方法换成toJSONStringWithDateFormat() 方法 1.1 编写测试类 MainApp: 1.2 运行结果 2 全局处理日期 全局处理日期,是指统一对需