2017-05-04 48 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库