无法将复杂参数从 jquery post 传递到 WebAPI
Can't pass complex parameters from jquery post to WebAPI
我有一个具有 WebAPI 功能的 ASP MVC 项目。我试图在我的 'Tools for apache cordove' 项目中通过 jquery POST 请求调用那些 API。 (visual studio 2015)
它适用于大多数功能。但是我有一个参数复杂的函数:
public JsonResult LoadHomePage(MostGoodsViewer mostgoodsviewer, SimilarItems newsitems, SimilarItems reviewitems, SimilarItems imaginalitems, string subDomain)
所有参数都是复杂的(最后一个除外)。例如:
public class MostGoodsViewer
{
public MostGoodsViewer()
{
ListGoodTypeId = new List<string>();
listPropertySetID = new List<int?>();
}
public List<string> ListGoodTypeId { get; set; }
public List<int?> listPropertySetID { get; set; }
public int PageSize { get; set; }
}
现在我想将其命名为 API。首先,我声明我的参数:
var mostgoodsviewerP =
{
ListGoodTypeId: [],
listPropertySetID: [],
PageSize: 13
};
var newsitemsP =
{
ItemCodeText: "/",
ItemTypeId: 15,
Count: 9
};
var reviewitemsP =
{
ItemCodeText: "/",
ItemTypeId: 19,
Count: 9
};
var imaginalitemsP =
{
ItemCodeText: "/",
ItemTypeId: 20,
Count: 9
};
接下来,我使用POST方法:
xhr = $.post('https://localhost:44302/Home/LoadHomePage', {
mostgoodsviewer: JSON.stringify(mostgoodsviewerP),
newsitems: JSON.stringify(newsitemsP),
reviewitems: JSON.stringify(reviewitemsP),
imaginalitems: JSON.stringify(imaginalitemsP),
subDomain: 'electronic'
},
function (data) {
// for (var i = 0; i < 9; i++)
{
var a = data._goodsorderByTotalVisit;
// other stuff
}
}).fail(function (data) {
alert("error");
});
我也尝试过使用 jQuery.param 而不是 JSON.stringify 但没有区别。
它总是跳入带有数据 "Object reference not set to an instance of an object".
的失败方法
然后我尝试使用 Fiddler 程序发送请求而不是我的 cordova 项目和 运行 我的 MVC 项目,在函数头下有一个断点。
我意识到的是参数不正确。例如,整数都是零。我不知道现在该怎么办!
你应该这样做
Jquery:
xhr = $.post('https://localhost:44302/Home/LoadHomePage', {
mostgoodsviewer: JSON.stringify(mostgoodsviewerP),
newsitems: JSON.stringify(newsitemsP),
reviewitems: JSON.stringify(reviewitemsP),
imaginalitems: JSON.stringify(imaginalitemsP),
subDomain: 'electronic'
},
控制器
public JsonResult LoadHomePage(string mostgoodsviewer, string newsitems, string reviewitems, string imaginalitems, string subDomain){
MostGoodsViewer mostGoodsViewer = JsonConvert.DeserializeObject<MostGoodsViewer>(mostgoodsviewer);
// and for others same thing to follow
}
这可能会帮助您解决这个问题。
你也可以
$.post(url, data, function(), "json")
在此处添加 "json"
作为第二个 arg
,您的模型绑定问题可能已通过当前代码修复。
我有一个具有 WebAPI 功能的 ASP MVC 项目。我试图在我的 'Tools for apache cordove' 项目中通过 jquery POST 请求调用那些 API。 (visual studio 2015) 它适用于大多数功能。但是我有一个参数复杂的函数:
public JsonResult LoadHomePage(MostGoodsViewer mostgoodsviewer, SimilarItems newsitems, SimilarItems reviewitems, SimilarItems imaginalitems, string subDomain)
所有参数都是复杂的(最后一个除外)。例如:
public class MostGoodsViewer
{
public MostGoodsViewer()
{
ListGoodTypeId = new List<string>();
listPropertySetID = new List<int?>();
}
public List<string> ListGoodTypeId { get; set; }
public List<int?> listPropertySetID { get; set; }
public int PageSize { get; set; }
}
现在我想将其命名为 API。首先,我声明我的参数:
var mostgoodsviewerP =
{
ListGoodTypeId: [],
listPropertySetID: [],
PageSize: 13
};
var newsitemsP =
{
ItemCodeText: "/",
ItemTypeId: 15,
Count: 9
};
var reviewitemsP =
{
ItemCodeText: "/",
ItemTypeId: 19,
Count: 9
};
var imaginalitemsP =
{
ItemCodeText: "/",
ItemTypeId: 20,
Count: 9
};
接下来,我使用POST方法:
xhr = $.post('https://localhost:44302/Home/LoadHomePage', {
mostgoodsviewer: JSON.stringify(mostgoodsviewerP),
newsitems: JSON.stringify(newsitemsP),
reviewitems: JSON.stringify(reviewitemsP),
imaginalitems: JSON.stringify(imaginalitemsP),
subDomain: 'electronic'
},
function (data) {
// for (var i = 0; i < 9; i++)
{
var a = data._goodsorderByTotalVisit;
// other stuff
}
}).fail(function (data) {
alert("error");
});
我也尝试过使用 jQuery.param 而不是 JSON.stringify 但没有区别。 它总是跳入带有数据 "Object reference not set to an instance of an object".
的失败方法然后我尝试使用 Fiddler 程序发送请求而不是我的 cordova 项目和 运行 我的 MVC 项目,在函数头下有一个断点。 我意识到的是参数不正确。例如,整数都是零。我不知道现在该怎么办!
你应该这样做
Jquery:
xhr = $.post('https://localhost:44302/Home/LoadHomePage', {
mostgoodsviewer: JSON.stringify(mostgoodsviewerP),
newsitems: JSON.stringify(newsitemsP),
reviewitems: JSON.stringify(reviewitemsP),
imaginalitems: JSON.stringify(imaginalitemsP),
subDomain: 'electronic'
},
控制器
public JsonResult LoadHomePage(string mostgoodsviewer, string newsitems, string reviewitems, string imaginalitems, string subDomain){
MostGoodsViewer mostGoodsViewer = JsonConvert.DeserializeObject<MostGoodsViewer>(mostgoodsviewer);
// and for others same thing to follow
}
这可能会帮助您解决这个问题。
你也可以
$.post(url, data, function(), "json")
在此处添加 "json"
作为第二个 arg
,您的模型绑定问题可能已通过当前代码修复。