Angular JS を使用してデータを取得し、MVC 4 コントローラーに JSON として投稿しています。DateTime/DateTime 以外のすべてのプロパティが適切に変換されますか? 種類。追加された新しいクラスやプロパティが日付を適切に処理するために特別な変換を行うことを覚えておく必要がないように、日付を処理するための「設定して忘れる」アプローチが必要です。次のアプローチと考えられる欠点を見てきました。人々は同じプラットフォームに対してどのようなアプローチを使用していますか? これを適切に処理している MVC4 に、構成していない可能性のあるものはありますか? どんな提案でも大歓迎です。
- カスタムモデルバインダー。Phil Haackブログの詳細として。パフォーマンスの問題の可能性。
- JS 側でいくつかの変更を行います。Robert Koritnik のブログで詳しく説明されています。これは Angular js では機能しないようです。おそらく $http.post にこれを機能させる設定がありますが、このアプローチではオブジェクトにすべて null 値があります。
- POST アクションで変換できる FormattedDateTime などの追加のプロパティがあります。これは、「/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);
});
}
}
フィドラーの投稿:
HTTP/1.1 200 OK キャッシュ コントロール: プライベート コンテンツ タイプ: アプリケーション/json; charset=utf-8 Server: Microsoft-IIS/8.0 X-AspNetMvc-Version: 4.0 X-AspNet-Version: 4.0.30319 X-SourceFiles: =?UTF-8?B?YzpcdXNlcnNcbmlja1xkb2N1bWVudHNcdmlzdWFsIHN0dWRpbyAyMDEyXFByb2plY3RzXFZhbGlkYXRpb25UZXN0XEhvbWVcR2V0UGVyc29uXDE=?= X-Powered-By: 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? プロパティはヌルです。