8

我正在使用 Angular JS 将数据作为 JSON 获取并发布到我的 MVC 4 控制器。除了 DateTime/DateTime 之外,我的所有属性都正确转换?类型。我希望有一种“设置并忘记它”的方法来处理日期,这样添加的新类和/或属性就不必记住进行一些特殊的转换来正确处理日期。我已经看到了以下方法和可能的缺点。人们在同一平台上使用什么方法?MVC4 中有什么东西可以正确处理我可能没有配置的吗?任何建议将不胜感激。

  1. 自定义模型绑定器。作为Phil Haack博客中的详细信息。可能的性能问题。
  2. 在 JS 端进行一些修改。正如Robert Koritnik 的博客中所详述的那样。这似乎不适用于 Angular js,也许 $http.post 中有一个设置允许它工作,但我的对象使用这种方法具有所有空值。
  3. 有一些额外的属性,例如 FormattedDateTime 可以在 POST 操作上进行转换。这不是“设置它并忘记它的方法”,尽管它确实允许在客户端正确显示仍为“/Date(695573315098)/”格式的日期

请参阅以下代码示例。C#类:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime BirthDate { get; set; }
    public DateTime? ApprovedForSomething { get; set; }
}

Angular JS 控制器:

    function PersonController($scope, $http) {
        $scope.getPerson = function () {
            $http.get('../../Home/GetPerson/1').success(function (data) {
                $scope.Person = data;
            });
        }
        $scope.updateApprovedForSomething = function () {
            $http.post('../../Home/UpdatePerson', { person: $scope.Person }).success(function (data) {
                console.log(data);
            });
        }
    }

提琴手 POST:

HTTP/1.1 200 OK 缓存控制:私有内容类型:应用程序/json;字符集= UTF-8服务器:Microsoft-IIS / 8.0 X-AspNetMvc-版本:4.0 X-ASPNET-版本:4.0.30319 X-SourceFiles:= UTF-的8B YzpcdXNlcnNcbmlja1xkb2N1bWVudHNcdmlzdWFsIHN0dWRpbyAyMDEyXFByb2plY3RzXFZhbGlkYXRpb25UZXN0XEhvbWVcR2V0UGVyc29uXDE = = X供电,通过????: ASP.NET 日期:2013 年 1 月 16 日,星期三 14:48:34 GMT 内容长度:124

{"FirstName":"Bob","LastName":"Smith","BirthDate":"/Date(695573315098)/","ApprovedForSomething":"/Date(1358261315098)/"}

正如您在 Fiddler 数据中看到的那样,日期以 JSON 日期的形式出现,但是当点击 POST 方法时,DateTime 属性不正确并且 DateTime? 属性为空。

在此处输入图像描述

4

1 回答 1

3

您是否可以选择将 AJAX 回发切换为由 WebApiApiController而不是 MVC 控制器处理?

我最近遇到了这个问题,并利用了 ApiController 对 ISO 8601 日期格式的支持。

这里有一些信息: http ://www.hanselman.com/blog/OnTheNightmareThatIsJSONDatesPlusJSONNETAndASPNETWebAPI.aspx

于 2013-12-18T14:32:28.517 回答