我有一个带有WebAPI功能的ASP MVC项目。我试图通过我的' Tools for apache cordove'中的jquery POST请求来调用这些API。项目。 (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,但没有区别。 它总是跳转到带有数据的失败方法&#34;对象引用未设置为对象的实例&#34;。
然后我尝试使用Fiddler程序发送请求而不是我的cordova项目,并在函数头下使用断点运行我的MVC项目。 我意识到参数不正确。例如,整数都为零。我现在不知道该怎么做!
答案 0 :(得分:1)
你应该这样做
<强> 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
,并且您的模型绑定问题可能会与当前代码一起修复。