2014-04-04 74 views
0

我必須從查看頁面向控制器發送對象。通過ajax調用將對象發送給控制器

Ajax代碼: -

var jsdata = '{p:' + data + '}'; 
$.ajax({ 
    type: "POST", 
    url: rootURL + "Deal/Check", 
    contentType: 'application/json; charset=utf-8', 
    data:JSON.stringify(jsdata, null, 2) , 
    success: function (data) {} 
    }); 

控制器: -

[HttpPost] 
public async Task<ActionResult> Check(DealCreateViewModel p) 
{  
    CheckAvailabilities(p); 
    return View(); 
} 

DealCreateViewModel: -

public List<AllocationID> Titles { get; set; } 
public List<AllocationID> Episodes { get; set; } 
[UIHint("MultiPicker")] public List<AllocationID> Assets { get; set; } 
[UIHint("MultiPicker")] public List<QuickID> Documents { get; set; } 
[UIHint("MultiPicker")] public List<AllocationID> Languages { get; set; } 
[UIHint("MultiPicker")] public List<AllocationID> Territories { get; set; } 
[UIHint("MultiPicker")] public List<AllocationID> Countries { get; set; } 
[UIHint("MultiPicker")] public List<AllocationID> Rights { get; set; } 
[UIHint("MultiPicker")] public List<AllocationID> Contributors { get; set; } 
[UIHint("MultiPicker")] public List<AllocationID> Transmissions { get; set; } 

,對象 「數據」 我通過Ajax發送可以是任何東西都意味着它可以是資產列表,標題列表,劇集列表或來自Viewmodel的其他任何內容。

+3

有什麼實際問題? –

+0

真的使用我發佈的這段代碼我無法獲得控制器中的對象。即使Ajax調用控制器的Check Action,但它不會將數據發佈到此操作。 – user3206357

+0

有動作接受一個json字符串嗎?! – deostroll

回答

0

嘗試下面的代碼

 $.ajax({ 
    type: "POST", 
    url: rootURL + "Deal/Check", 
    contentType: 'application/json; charset=utf-8', 
    dataType:'json', 
    data: { p : data }, 
    success: function (data) {} 
    }); 
+0

No..its not working。( – user3206357

+0

我已更新ans可以試試@AkankshaT – Neel

+0

此代碼甚至沒有調用action.Its拋出以下錯誤 - 無法加載資源:服務器響應的狀態爲500(內部服務器錯誤) – user3206357

0

你可以把它作爲一個簡單的JSON字符串。但是,您不會知道對象的類型或對象的類別。所以我們必須指定類型以及我們傳遞給action方法的json字符串。在你的情況下,你需要指定一個列表類型(AllocationID,QuickID)和一個對象類(文檔,位置等)。

因此樣品JSON看起來像:

var jsdata = { 
    "listType": "AllocationID", 
    "objectName" : "Documents", 
    "data": [ 
      //list of json object representing a document. 
     ] 
    }; 

var dto = { jsonData: jsData }; 
$.ajax({ 
    type: "POST", 
    url: rootURL + "Deal/Check", 
    data:JSON.stringify(dto), 
    success: function (data) {} 
    }); 

你的操作方法將看起來像:

[HttpPost] 
public async Task<ActionResult> Check(string jsonData) 
{ 
    //use newtonsoft json parser 
    JObject obj = JObject.Parse(jsonData); 
    var listType = obj["listType"].Value<string>(); 
    if(listType == 'AllocationID') 
    { 
     var jarr = obj["data"].Value<JArray>(); 
     List<AllocationID> documents = jarr.ToObject<List<AllocationID>>(); 
     //do something with documents list... 
    } 
} 
+0

它沒有工作:( – user3206357

+0

你能分享你正在觀察的內容? – deostroll

+0

你應該從$ .ajax調用中移除contentType,編輯答案。 – deostroll

相關問題