我正在使用 Angular JS 将数据作为 JSON 获取并发布到我的 MVC 4 控制器。除了 DateTime/DateTime 之外,我的所有属性都正确转换?类型。我希望有一种“设置并忘记它”的方法来处理日期,这样添加的新类和/或属性就不必记住进行一些特殊的转换来正确处理日期。我已经看到了以下方法和可能的缺点。人们在同一平台上使用什么方法?MVC4 中有什么东西可以正确处理我可能没有配置的吗?任何建议将不胜感激。
- 自定义模型绑定器。作为Phil Haack博客中的详细信息。可能的性能问题。
- 在 JS 端进行一些修改。正如Robert Koritnik 的博客中所详述的那样。这似乎不适用于 Angular js,也许 $http.post 中有一个设置允许它工作,但我的对象使用这种方法具有所有空值。
- 有一些额外的属性,例如 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? 属性为空。