【问题标题】:Ajax call is returning object with null valuesAjax 调用正在返回具有空值的对象
【发布时间】:2017-05-28 11:14:26
【问题描述】:

我正在尝试使用 ajax 将对象从视图传递到控制器。但我在控制器的对象内得到空值。我的代码如下..你能帮我解决这个问题吗

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
function Save() {
    // var Trip={output};
    debugger;
    var stop;
    var table = $('#scheduletable').DataTable();
    var rows = $('#scheduletable tr');
    var StopNames = '';
    var TripNumbers = '';
    var TripDetails = '';
    StopNames += table.column(0).data().toArray().join("&");
    for (var i = 1; i < rows[0].cells.length; i++) {
        TripNumbers += rows[0].cells[i].innerText + '&';
        TripDetails += table.column(i).data().toArray().join("&");
    }
    debugger;
    TripNumbers = TripNumbers.replace(/(\r\n|\n|\r)/gm, "");
    var output = {
        'StopNames': StopNames,
        'TripNumbers': TripNumbers,
        'TripDetails': TripDetails
    };
     $.ajax({
        type: "POST",
        url: "/ScheduleManagement/ScheduleManagement/SaveSchedules",
        // contentType: 'application/json;',
        dataType: "json",
        data: JSON.stringify(output),
        success: function (values) {
        },
        error: function (err) {
            console.log(err);
        }
    });
}

我在控制器中使用下面的代码

[HttpPost]
public JsonResult SaveSchedules(TripsToSave output)
{
    // dynamic item = output;
    int serviceId = Convert.ToInt32(Session["ServiceGroupId"]);
    // int status= _scheduleManagementBL.SaveMasterSchedule(output);
    return Json("1", JsonRequestBehavior.AllowGet);
    // return RedirectToAction("DisplayHttpError", "Error");
}

我在这段代码中使用的实体是

public class TripsToSave
{
    public string StopNames { get; set; }
    public string TripNumbers { get; set; }
    public string TripDetails { get; set; }
}

【问题讨论】:

  • 在 ajax 请求中传递数据的方式是直接通过 StopNames、TripNumbers、TripDetails 获取参数,而不是通过输出。
  • 只需data: output,(或者如果你将其字符串化,那么你需要contentType: 'application/json;'

标签: c# jquery ajax asp.net-mvc


【解决方案1】:

你可以试试这个

 var output = {
        StopNames: 'StopNames',  // change the value with string
        TripNumbers: 'TripNumbers', // change the value with string
        TripDetails: 'TripDetails' // change the value with string
    };

 $.ajax({
    type: "POST",
    url: "/ScheduleManagement/ScheduleManagement/SaveSchedules",
    contentType: 'application/json; charset=utf-8',
    dataType: "json",
    data: JSON.stringify(output),
    success: function (values) {
    },
    error: function (err) {
        console.log(err);
    }
});

数据类型:'json',

从服务器返回数据的平均类型应该是json

contentType: '应用程序/json; charset=utf-8',

它的平均数据类型应该是json,然后才能将它发送到服务器,在你的情况下你需要将你的数据转换成json stringfy..

注意:

弃用通知:jqXHR.success()、jqXHR.error() 和 jqXHR.complete() 回调从 jQuery 3.0 开始被删除。您可以使用 jqXHR.done()、jqXHR.fail() 和 jqXHR.always() 代替更多详细信息请访问 - 访问

【讨论】:

  • 感谢您的帮助.. 当我按照您的建议更改代码时,它工作正常。
【解决方案2】:

你不需要对输出数据进行字符串化,按原样传递。

        var StopNames = 'ss';
        var TripNumbers = 'ss';
        var TripDetails = 'cc';

           var output = {
            'StopNames': StopNames,
            'TripNumbers': TripNumbers,
            'TripDetails': TripDetails
        };

       $.ajax({
            type: "POST",
            url: "/abc/SaveSchedules",

            dataType: "json",
            data: output,
            success: function (values) {
            },
            error: function (err) {
                console.log(err);
            }
        });

【讨论】:

    猜你喜欢
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多