【问题标题】:jQuery Ajax call not matching the Controller parameters even after Json.Stringify()即使在 Json.Stringify() 之后,jQuery Ajax 调用也不匹配控制器参数
【发布时间】:2017-08-01 06:25:11
【问题描述】:

有人能指出我在这里做错了什么吗?我已经按照标准方法使用带有 $.ajax 请求的 jQuery 从视图中调用 MVC 控制器。我还将模型的名称与参数相匹配。 这是我的控制器,它在调用 ajax 调用但在参数中获取空值时被击中:

    [HttpPost, Route("GetUserSettingsTable")]
    public ActionResult GetUserSettingsTable(List<UserSettingsTable> userSettings)
    {
        return PartialView("_UserSettingsTable.cshtml", userSettings);
    }

这是我正在使用的脚本文件:

    var selectedUser = $('#Employees_SelectedValue').val();
    var selectedCountries = $('#Countries_SelectedValue').val();
    var selectedSourceSystems = $('#SourceSystems_SelectedValue').val();
    var userSettings = [];
    for (var i = 0, max = Math.max(selectedCountries.length, selectedSourceSystems.length); i < max; i++)
    {
        userSettings.push({
            UserName: selectedUser,
            UserCountry: selectedCountries[i] || "",
            UserSourceSystem: selectedSourceSystems[i] || ""
        });
    };

    //Here userSettings has values like: [{"121", "AU", "ABC"}, {"121", "IN", "PQR"}, {"121", "NZ", "XYZ"}]

    $.ajax({
         url: '@Url.Action("GetUserSettingsTable", "Admin")',
         type: "POST",
         data: JSON.stringify(userSettings),
        success : function (result)
        {
            $('#userSettingsTable').html(result);
        },
        error: function (result)
        {
            alert(result);
        }
    });

我的模型定义如下:

public class UserSettingsTable
    {
        public string UserName { get; set; }

        public string UserCountry { get; set; }

        public string UserSourceSystem { get; set; }
    }

我无法找到不匹配的位置,因为当我调用控制器时,它的参数值变为 null。任何帮助表示赞赏。

【问题讨论】:

  • 如果你使用JSON.stringify(..)那么你还需要包含contentType: 'application/json'
  • 我不知道为什么会这样,但是在我的测试环境类型:“POST”上,工作正常。但是在我的生产服务器上它坏了 - 类型:“POST”不起作用。我其实还是很好奇为什么。但是尝试输入:“post”,也许对你有用。

标签: javascript jquery json ajax asp.net-mvc


【解决方案1】:

从数据中删除 JSON.stringify(),

$.ajax({
     url: '@Url.Action("GetUserSettingsTable", "Admin")',
     type: "POST",
     data: userSettings,
    success : function (result)
    {
        $('#userSettingsTable').html(result);
    },
    error: function (result)
    {
        alert(result);
    }
});

【讨论】:

  • 请解释问题所在,不要只发布代码。如果您不解释问题,它不会真正帮助提出问题的人。
猜你喜欢
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
  • 2020-12-07
相关资源
最近更新 更多