2012-04-06 73 views
1

我試圖找出一種方法將我的視圖中的整個類傳遞給帶有Javascript/AJAX的控制器。如何使用MVC中的Javasctipt/AJAX將整個對象傳遞給控制器​​?

我知道下面的Ajax代碼可以用來傳遞ID,但是我可以傳遞整個模型嗎?

@model User 
    $.ajax(
     { 
      type: "POST", 
      url: "\User\", 
      data: @model.id, 
      success: 
       reloadPage() 
     }); 

只見同時搜索以下解決方案: Is there a way to pass a "C#" object to a controller via AJAX?

我可以簡單地做到這一點呢? :

@model User 
    $.ajax(
     { 
      type: "POST", 
      url: "\User\", 
      data: @model, 
      success: 
       reloadPage() 
     }); 

這項工作?多麼安全?最好的方法是什麼?

回答

4

退房的JavascriptSerializer.Serialize()方法。因此,像這樣:

@model User 
$.ajax({ 
    type: "POST", 
    url: "\User\", 
    data: JSON.parse(@(new JavascriptSerializer().Serialize(Model))), 
    success: reloadPage 
}); 

從本質上講,這種序列化模型爲JSON字符串,然後將其解析客戶端回一個JS對象,然後將其傳遞到AJAX請求。當請求到達服務器時,MVC模型綁定處理基於JSON對象構建模型的實例。

請注意,較舊版本的IE不支持JSON.parse。您可以獲得json2.js以填充IE的方法。

+3

謝謝。 以下是稍後查看此文件的名稱空間: System.Web.Script.Serialization。JavaScriptSerializer()。序列化(模型) – Shenaniganz 2012-04-06 22:10:37

+2

但是,這不僅僅是當頁面加載時序列化那裏的內容,而不是視圖中創建/更新的模型? – klkitchens 2013-02-09 15:53:01

+1

案例類型,該類稱爲JavaScriptSerializer,腳本中包含大寫字母S. (不是JavascriptSerializer) – Blizwire 2014-12-19 00:02:51

2

雖然不是最好的做法,如果沒有其他的方式來獲得這些數據,那麼你可以通過TempData的

查看傳遞數據:

@{ 
TempData["myModel"] = Model; 
} 

控制器:

var myModel = TempData["myModel"]; 
TempData.Remove("myModel"); 
2

創建與原始對象具有相同屬性的Json對象,將Json對象名稱作爲控制器參數名稱。 傳遞JSON對象到控制器使用AJAX請求

MVC模型綁定將takecare的剩下的事情

+0

因此,當User對象最初傳遞給視圖模型時,它需要是JSON類型? 接收端怎麼樣,一旦我從視圖進一步發送到具有這種邏輯的下一個控制器? 框架會自動將它從JSON解析回用戶類型嗎? – Shenaniganz 2012-04-06 01:53:03

+0

一旦檢查此問題的答案[鏈接](http://stackoverflow.com/questions/560575/asp-net-mvc-how-to-pass-json-object-from-view-to-controller-as-parameter) – Raghuveer 2012-04-06 01:57:50

+0

好吧,所以似乎在MVC3 JSON類類型綁定必須手動處理。現在使用MVC3它會自動處理。 快速問題,然後關閉它。當我已經處理視圖時,是否可以將模型轉換爲JSON?或者只是模型必須是JSON類型的時候,它成爲一個View模型? – Shenaniganz 2012-04-06 20:38:00

1

嘗試使用序列化(jQuery)

例如,

$.ajax({ 
    type: "POST", 
    url: "\User\", 
    data: $(form).serialize(), 
    success: reloadPage() 
}); 
相關問題