根据Fiddler的说法,我从JQuery AJAX传来的帖子是: -
$(input1, input2, input3)
将我的功能作为MVC控制器
[
{
"name": "Colour",
"value": ""
},
{
"name": "Name",
"value": "The Name"
}
]
我可以在getadvanced上设置一个断点,但值为null,我错过了什么。我做了另一个有效的页面,但Ajax格式不同,我想用
/* In Model */
public class SearchObj
{
public string Colour;
public string Name;
}
/* In Controller */
[HttpPost]
public JsonResult getadvancedsearch(SearchObj oSearch)
{
是最好的方式。问题是为什么即使值不是
,oSearch上的值也会为空白JQuery是: -
JSON.stringify($("#TheForm").serializeArray())
答案 0 :(得分:1)
您的JSON显示了一个包含多个对象的数组,它们甚至看起来都不像SearchObj
个对象 - 您有一组包含name
和value
的对象,以及ASP .NET MVC正在寻找一个Colour
和Name
的对象。
如果您创建一个具有正确字段的类,并更新您的getadvancedsearch
以获取数组,那么绑定应该可以正常工作。但看起来您只是错误地生成了JSON。
你可能真的想这样做:
$("#TheForm").serialize()
这应该为您当前的控制器代码提供正确格式的JSON。
答案 1 :(得分:1)
您将地图发布到IEnumable<CorrectedSearchObj>
其中CorrectedSearchObj看起来像这样
public class CorrectedSearchObj
{
public string name { get; set; }
public string value { get; set; }
}
如果你想发送你的SearchObj,那么Json看起来像
{ "Color" : "", "Name": "The Name" }
答案 2 :(得分: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),
然后在控制器中:
[HttpPost]
public JsonResult getadvancedsearch(string json)
{
SearchObj oSearch= JsonConvert.DeserializeObject<SearchObj >(json);
使用Newsoft Json库