具有多个参数的Ajax调用

时间:2015-04-15 01:59:41

标签: jquery asp.net-mvc

我是ASP.NET MVC中AJAX调用的新手。我试图弄清楚如何将以下参数传递给我的控制器。

LeadController:

    [HttpPost]
    public void SaveWebLeadforYear(string office, int year, int[] values)
    {
        int index = 0;
        WebLead.removeByYear(office, year);


            for (int m = 0; m < months.Length; m++)
            {
                if (index < values.Length) {WebLead.Save(office, values[index++], months[m], year); }
            }


    }

JavaScript的:

var leadList = new Array();

    //scan through the text boxes
    $('#WebLeadsEntry').find(' input:text').each(function () {
        leadList.push($(this).val().trim() == "" ? -1 : $(this).val());
    });



    debugger

    $.ajax({
        type: "POST",
        url: '/Lead/SaveWebLeadforYear',
        //data: { 'office': office1, 'year': parseInt(year1)},
        data: 
            {
                office: $("#officeList").val(),
                year: $("#yearList").val(),
                values: JSON.stringify(leadList),  
            },
        contentType: "application/json; charset = utf-8",
        datatype: "json",
        async: true,
        cache: false,
        success: function (response) {
            debugger
            //table is saved to the database, remove the tab
        },
        error: function (x, e) {
            debugger
            window.location.href = "/Lead/Errorpage";
        }
    });

总是会出错。你知道为什么吗?

1 个答案:

答案 0 :(得分:1)

构建一个javascript对象来表示您的数据。请致电JSON.stringify。您的HttpPost操作方法将能够获取数据。

此代码应该有效。

$(function () {

    $("#btnSave").click(function (e) {
        e.preventDefault();

        var leadList = [];
        $('#WebLeadsEntry').find(' input:text').each(function () {
            leadList.push($(this).val().trim() == "" ? -1 : $(this).val());
        });

        var model = {
                      office: $("#officeList").val(),
                      year: $("#yearList").val(),
                      values: leadList,
                    };

        $.ajax({
            type: "POST",
            url: '/Account/SaveWebLeadforYear',
            data: JSON.stringify(model),
            contentType: "application/json; charset = utf-8",
            datatype: "json",
            async: true,
            cache: false,
            success: function (response) {
                console.log(response);
            },
            error: function (x, e) {
                console.log('err');
            }
        });

    });

});

另外,作为旁注,我不会硬编码url属性值的路径。使用Url.Action html辅助方法生成action方法的路径是一个安全的想法。例如,如果您将脚本放在视图中,则可以执行此操作,

$.ajax({
         type: "POST",
         url: '@Url.Action("SaveWebLeadforYear","Account")',

如果您的脚本位于单独的js文件中,则可以创建变量以将URL保存到不同的操作方法,并在视图中设置这些变量的值,并在同一页面/视图的其他javascript文件中再次使用它