Ajax调用无法从控制器操作方法接收对象列表

时间:2016-04-20 20:20:40

标签: ajax asp.net-mvc

这是我的控制器

[HttpPost]
public JsonResult UpdateCountryDropDownList(string ContinentId)
{
        HotelContext H = new HotelContext();
        int ContinentID = int.Parse(ContinentId);
        List<Country> Co = H.Country.Where(x => x.ContinentId == ContinentID).ToList();
        List<string> mylist = new List<string>(new string[] { "element1", "element2", "element3" });

        return Json(new { ListResult = Co }, JsonRequestBehavior.AllowGet);
}

当我通过mylist代替 Co 时,它可以正常工作

这是我的ajax电话。

$(document).ready(function () {
          $("#Name").change(function () {
              var ContinentoId = $(this).val();

              $.ajax({
                  type: "Post",
                  dataType: "json",

                  data: { ContinentId: ContinentoId },
                  url: '@Url.Action("UpdateCountryDropDownList","Home")',

                  success: function (result) {
                      alert("worked");
                  },
                  error: function (xhr, ajaxOptions, thrownError) {
                      alert("failed");
                  }

它在传递国家/地区对象列表时给出了失败的消息,但在传递字符串列表时成功。这里出了什么问题?

1 个答案:

答案 0 :(得分:0)

你应该做的第一件事是检查你的呼叫失败。

而不是alert('failed')执行类似console.log(arguments)的操作,并查看您的浏览器开发工具(控制台)以查找实际消息。

我猜测你的错误信息会出现在没有方法存在的情况下。

您的控制器仅设置为接收单个字符串。

public JsonResult UpdateCountryDropDownList(string ContinentId)

如果您希望能够POST字符串列表,请将控制器更改为接受List<string>,例如(注意我更改了参数名称)

public JsonResult UpdateCountryDropDownList(List<string> ContinentIds)

然后您就可以发布一个字符串数组 - 将您的ajax调用调整为:

data: { ContinentIds: ["1","2","3"]}

虽然这个概念已经存在,但这些都没有经过测试。