2017-05-04 87 views
0

據提琴手,我是從JQuery的AJAX傳遞職位是: -如何反序列化JSON在ASP.NET MVC

[ 
    { 
     "name": "Colour", 
     "value": "" 
    }, 
    { 
     "name": "Name", 
     "value": "The Name" 
    } 
] 

隨着我的MVC控制器功能

/* In Model */ 
public class SearchObj 
{ 
    public string Colour; 
    public string Name; 
} 

/* In Controller */ 
    [HttpPost] 
public JsonResult getadvancedsearch(SearchObj oSearch) 
{ 

我可以在getadvanced上放置一個斷點,但值爲空,我錯過了什麼。我做了另一個工作頁面,但Ajax格式不同,我以爲使用

JSON.stringify($("#TheForm").serializeArray()) 

是最好的方法。問題是爲什麼oSearch上的值即使在值不是時也是空白的?

的jQuery是: -

$(function() { 
    $("#TheForm").submit(function (e) { 
    var status = this.value; 
    e.preventDefault(); 
    $.ajax({ 
    type: "Post", 
    url: '@("/fetch/getadvancedsearch")', 
    dataType: "json", 
    data: JSON.stringify($("#TheForm").serializeArray()), 
    contentType: "application/json; charset=utf-8", 
    success: .... 
+1

顯示你的Ajax查詢,如果你不介意 – Kramb

+1

數組是不是一個單一的對象... –

回答

1

你的JSON顯示多個對象的數組,而他們甚至不看起來像SearchObj對象 - 你有對象的數組與namevalue,和ASP。 NET MVC正在尋找一個ColourName的對象。

如果您創建一個具有正確字段的類,並更新getadvancedsearch以獲取數組,則綁定應該正常工作。但是看起來你只是錯誤地生成了JSON。

你可能真的要做到這一點:

$("#TheForm").serialize() 

這應該給你JSON在當前的控制器代碼正確的格式。

+0

當我這樣做,格式就像查詢字符串,而不是JSON格式,我不打擾它的格式,只是它是否可以被asp.net接受。 – MiscellaneousUser

+0

查詢字符串格式應該與ASP.NET MVC綁定一起工作正常 - 當您這樣做時,您的「oSearch」對象是否正確填充?如果不是,它會得到什麼值,查詢字符串是什麼樣的? –

+0

無論我使用什麼方法,所有值都爲空。 – MiscellaneousUser

1

JSON的你貼映射到IEnumable<CorrectedSearchObj>

其中CorrectedSearchObj看起來像這樣

public class CorrectedSearchObj 
{ 
    public string name { get; set; } 
    public string value { get; set; } 
} 

,如果你想送你SearchObj,那麼JSON是將會是什麼樣

{ "Color" : "", "Name": "The Name" } 
+0

這確實是我想要的格式,但Jquery沒有創建這種格式。當我得到這種格式時,C#填充變量。最後,我開始構建自己的JSON查詢字符串。 – MiscellaneousUser

0

嘗試使用

var searchObject ={ 
    Colour : '', 
    Name : '' 
}; 

var fields =$("#TheForm").serializeArray(); 
jQuery.each(fields, function(i, field) { 
    if (field.name ==='Colour'){ 
    searchObject.Colour = field.value; 
    } 
    if (field.name ==='Name'){ 
    searchObject.Name = field.value; 
    } 
}); 
然後

data: JSON.stringify(searchObject), 

在控制器:210

它傳遞給數據

[HttpPost] 
public JsonResult getadvancedsearch(string json) 
{ 
SearchObj oSearch= JsonConvert.DeserializeObject<SearchObj >(json); 

使用新軟JSON庫