控制器未接收 Ajax 值

Ajax value not received by controller

提问人:user9177098 提问时间:1/26/2018 最后编辑:user9177098 更新时间:1/26/2018 访问量:47

问:

我有这个代码,它被正确地传递给了它的控制器对应物。 但由于某种原因,搜索模型数据只有 null,而 pageNumber 被正确接收 我在某个地方犯了错误吗?

 $("#NextResult").click(function () {
            var xData= document.getElementById("x1").value;
            var yData= document.getElementById("y1").value;

            var searchModel = {
                xval: xData,
                yval: yData,
            };
            var pageNumber = @Model.Page +1;
            $.ajax({
                url: "/Work/FilterData",
                type: "GET",
                data: { 'searchModel': searchModel, 'pageNumber': pageNumber },
                error: function (xhr, ajaxOptions, thrownError) {
                    alert(thrownError);
                }

            }).success(function (response) {
                $('#datas').html(response)
            })
        });

控制器就是这样

[HttpGet]
public ActionResult FilterData(WorkSearchModel searchModel,int? pageNumber)

{

编辑:

正如建议的那样,我尝试在不同的项目上同时执行这两个操作(这使得函数不可调用,因此我认为某处存在错误)

$("#NextResult").click(function () {
            var xData= document.getElementById("x1").value;
            var yData= document.getElementById("y1").value;
     var searchModel = {
        xval: xData,
                yval: yData,
                       pageNumber = @Model.Page +1
    };

        $.ajax({
            url: "/Work/FilterData",
            type: "GET",
            data: searchModel,
            error: function (xhr, ajaxOptions, thrownError) {
                alert(thrownError);
            }

        }).success(function (response) {
            $('#datas').html(response)
        })
    });

我也尝试过这样做,但没有任何效果(这现在为 searchmodel 和 pageNumber 都提供了 null 值)

  $.ajax({
        url: "/Work/FilterData",
        type: "GET",
        data: JSON.stringify(searchModel, pageNumber),
        contentType: "application/json;",
C# asp.net-mvc-ajax

评论

0赞 1/26/2018
将其更改为 and(即一个对象中的所有值)。或者,您必须将数据字符串化并将var data = { xval: xData, yval: yData, pageNumber: @Model.Page +1 };data: data,contentType'application/json'
0赞 user9177098 1/26/2018
如果我这样做,我是否仍然需要在控制器中更改操作结果?如何确保只有 xval 和 yval 被包含在 WorkSearchModel 中?
0赞 1/26/2018
不,您不需要更改控制器(我假设包含这 2 个属性) - 尝试一下!WorkSearchModel
0赞 user9177098 1/26/2018
var data = { xval: xData, yval: yData, pageNumber:@Model.Page +1 };$.ajax({ url: “/Work/FilterData”, type: “GET”, data: JSON.stringify(data), contentType: “application/json;”, error: function (xhr, ajaxOptions, thrownError) { alert(thrownError);Success(函数(响应) { $('#datas').html(响应) }) 我尝试这样做,但它给了我空的响应
0赞 1/26/2018
再次阅读第一条评论 - 一个或另一个!

答:

0赞 Mark Redman 1/26/2018 #1

我会将调用从 GET 更改为 POST

0赞 Marcus Höglund 1/26/2018 #2

一种解决方案是在查询字符串中逐个发送参数,如下所示

$("#NextResult").click(function () {
    var xData= document.getElementById("x1").value;
    var yData= document.getElementById("y1").value;

    var pageNumber = @Model.Page +1;
    $.ajax({
        url: "/Work/FilterData?xval=xData&yval=yData&pageNumber=pageNumber",
        type: "GET",
        error: function (xhr, ajaxOptions, thrownError) {
            alert(thrownError);
        }

    }).success(function (response) {
        $('#datas').html(response)
    })
});

和控制器

[HttpGet]
public ActionResult FilterData(int xval, int yval, int? pageNumber)