无法将复杂参数从jquery post传递给WebAPI

时间:2016-01-19 08:11:33

标签: jquery asp.net-mvc post asp.net-web-api visual-studio-cordova

我有一个带有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项目。 我意识到参数不正确。例如,整数都为零。我现在不知道该怎么做!

1 个答案:

答案 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,并且您的模型绑定问题可能会与当前代码一起修复。