Angular JS与MVC4模型绑定失败的日期/日期时间?

时间:2013-01-22 20:19:01

标签: asp.net-mvc asp.net-mvc-4 angularjs

使用Angular JS使用复杂对象回发到服务器的日期时间和日期时间?值无法正确绑定。我试过JSON.stringify无济于事。我发布了一个相关的问题,虽然它可能过于笼统。我真正需要知道的是如何正确地传递这些日期。我目前正在做的是使用js中的变换来转换日期,但我宁愿不这样做,只需在Angular中获取我需要它们的表单中的日期然后传回正确的值。

如何绑定到那些日期时间/日期时间?价值正确吗?请参阅以下代码示例和Fiddler发布结果。

C#Class:

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 Controller:

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

Fiddler Post:

  

HTTP / 1.1 200 OK Cache-Control:private Content-Type:application / json;   charset = utf-8服务器:Microsoft-IIS / 8.0 X-AspNetMvc-版本:4.0   X-AspNet-Version:4.0.30319 X-SourceFiles:   =?UTF-8 2 B 4 YzpcdXNlcnNcbmlja1xkb2N1bWVudHNcdmlzdWFsIHN0dWRpbyAyMDEyXFByb2plY3RzXFZhbGlkYXRpb25UZXN0XEhvbWVcR2V0UGVyc29uXDE =?=   X-Powered-By:ASP.NET日期:2013年1月16日星期三14:48:34 GMT   内容长度:124

     

{ “姓”: “鲍勃”, “名字”: “史密斯”, “出生日期”: “/日期(695573315098)/”, “ApprovedForSomething”: “/日期(1358261315098)/”}

这是服务器端的结果。 datetime绑定到一个不正确的新日期时间值和日期时间?一片空白。

enter image description here

2 个答案:

答案 0 :(得分:3)

如果有人有更好的解决方案,请随时更新答案。

可能有更好的解决方案,但我所做的是非常简单的解决方法。 只需为DateTime对象创建一个封装属性,然后将其用于绑定目的。

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime BirthDate { get; set; }
    public DateTime? ApprovedForSomething { get; set; }
    public DateTime BirthDateAsString 
    {
        get { return BirthDate.ToShortDateString();}
        set { DateTime.Parse(value, BirthDate);}
   }
}

通过http,所有对象都被视为字符串,但ASP.NET非常智能,可以提供模型绑定功能。但是,它无法将JavaScript Date对象绑定到.NET DateTime对象。

答案 1 :(得分:2)

更强大的方法是使用模型绑定器来处理所有传入日期。

var el = document.getElementById('element')
var rectObject = el.getBoundingClientRect();
var scroll = document.body.scrollTop 
el.className = 'unpinned';
el.style.top = (scroll + rectObject.top) + "px"

添加全局ASAX。

.unpinned {
  position: absolute;
}