2011-06-26 19 views
0

我無法將序列化的js對象傳遞給控制器​​,並讓默認的模型綁定器自動將其反序列化到我的對象中。MVC3 - 將JavaScript對象反序列化到控制器

我可以手動將值反序列化到我的對象,它都很好。但我想知道爲什麼它不起作用。

感謝

這裏是我的代碼片段

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

      }); 

這裏是崗位價值從Firefox得到它

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」。查看此博客文章瞭解更多詳情。關注jQuery代碼示例,而不是ASP.NET MVC 3中不必要的服務器端更改: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