2011-06-26 10 views
0

シリアライズされたjsオブジェクトをコントローラに渡し、デフォルトのモデルバインダを自動的にオブジェクトにデシリアライズさせることができません。MVC3 - コントローラへのjavascriptオブジェクトのデシリアライズ

私のオブジェクトに値を手作業でデシリアライズしても問題ありません。私はなぜそれが動作しないか知りたいです。

おかげでここ

はポスト値は、Firefoxからそれを得る

jsのコードここ

$.post('/Order/AddRecordAddHocStock2', { idPatient: $patientId, "orderItems": JSON.stringify($orderItems) }, function (data) { 
       //$("#recordingdialog").html(data).dialog("open"); 

       var $dialog = $("#popup_dialog2"); 

       $dialog.empty(); 
       $dialog 
       .dialog({ 
        bgiframe: true, 
        title: $title, 
        height: 700, 
        width: 650, 
        modal: true, 
        autoOpen: false, 
        resizable: false 
       }); 

       $dialog.html(data).dialog("open"); 

      }); 

私のコードスニペットです。ここ

idPatient 72 
orderItems  [{"Id":0,"ProductName":"01870","Quantity":0,"StockOnHand":0,"MaxAllowance":12,"OrderTotal":0},{"Id":0,"ProductName":"01870","Quantity":0,"StockOnHand":0,"MaxAllowance":1,"OrderTotal":0}] 

は私が予想私のコントローラであり、 orderItemsは、前のjs objから値を自動的に取り込む必要がありますect

 [HttpPost] 
    public virtual ActionResult AddRecordAddHocStock2(long idPatient, List<OrderItemModel> orderItems) 
    { 
     var items = Request.Form["orderItems"]; 
     //it's working if I manually deserialize the js object 
     var data = new JavaScriptSerializer().Deserialize(items,typeof(List<OrderItemModel>)); 
    } 

答えて

3

"application/json"にコンテンツタイプを設定する必要があります。詳細については、このブログ記事を参照してください。 ASP.NET MVC 3では不要なサーバーサイドの変更ではなく、jQueryコードのサンプルに焦点を当てています。http://haacked.com/archive/2010/04/15/sending-json-to-an-asp-net-mvc-action-method-argument.aspx

+0

jquery $ .postはコンテンツタイプをサポートしていません。私は$ .ajaxで試してみましたが、うまくいきましたが、もう一度問題があります。データを取り戻すと、jqueryはparseerrorを発生させます。ステータスは200ですが、statstextにはエラー – Vincent

+0

が表示されます。新しいエラーについての詳細情報が必要な場合があります。おそらく、より詳細な新しい質問です。サーバー例外がスローされていますか?フィドラーはレスポンスとして何を示していますか?等 – Haacked

+0

こんにちはHaacked 私は問題を解決しました。私は日付のクエリ文字列に別の問題がありました。デフォルトのモデルバインダーはコントローラのパラメータにバインドできません。私の日付形式はdd/MM/yyyyのように見える – Vincent

関連する問題