将多个对象传递给控制器

时间:2015-06-30 21:12:23

标签: ajax asp.net-mvc

我正在将一个对象传递给我的控制器:

var form = JSON.stringify({
        "subRevisedRequest": $('#frmRevised').val(),
        "subSubcontractor": $('#frmSubcontractor').val(),
        "subDescription": $('#frmDesc').val(),
        "subCostCode": $('#frmCostCode').val(),
        "subAmt": $('#frmAmt').val(),
        "subPaymentTerms": "terms",
        "subRetainage": 10,
        "subComments": $('#frmComment').val()
    });

    $.ajax({
        url: '@Url.Action("CreateSubcontracts", "Routing")',
        type: "POST",
        datatype: "JSON",
        contentType: "application/json; charset=utf-8",
        data: form,
        success: function(result) {
            if (!result.success) {
                $('#errormsg').empty();
                $('#errormsg').append(result.message);
            } else {
                location.href = '@Url.Action("Index", "Home")';
            }
        },
        error: function (result) {
            alert("Failed");
        }
    });

我的控制器认为这是它正在寻找的对象:

public ActionResult CreateSubcontracts(RoutingSubcontracts s)

我的问题是,我想再传递一个字符串。我知道我可以制作一个特定模型的视图,但我想知道我是否可以做这样的事情,例如:

public ActionResult CreateSubcontracts(RoutingSubcontracts s, string bu)

我试过以下但没有运气:

data: JSON.stringify({ "s": form, "bu": "251" }),

但复杂的对象只是以null形式出现。有没有办法可以传递对象和字符串?

2 个答案:

答案 0 :(得分:1)

尝试在您已有的JSON中添加字符串项。不要对它进行字符串化,否则它只会发送一个大字符串,你必须再次在服务器上进行解析。

var form = {
    "subRevisedRequest": $('#frmRevised').val(),
    "subSubcontractor": $('#frmSubcontractor').val(),
    "subDescription": $('#frmDesc').val(),
    "subCostCode": $('#frmCostCode').val(),
    "subAmt": $('#frmAmt').val(),
    "subPaymentTerms": "terms",
    "subRetainage": 10,
    "subComments": $('#frmComment').val(),
    "bu": "251"    // add it here
};

$.ajax({
    url: '@Url.Action("CreateSubcontracts", "Routing")',
    type: "POST",
    datatype: "JSON",
    data: form,
    success: function(result) {
        if (!result.success) {
            $('#errormsg').empty();
            $('#errormsg').append(result.message);
        } else {
            location.href = '@Url.Action("Index", "Home")';
        }
    },
    error: function (result) {
        alert("Failed");
    }
});

答案 1 :(得分:0)

在你的视图中,jquery为bu创建第二个var。像你这样在你的ajax调用中分配数据;

data: { "s" : form, "bu" : "251" }

在你的控制器方法中,将签名更改为包含这样的默认值;

public ActionResult CreateSubcontracts(RoutingSubcontracts s, string bu = "NoValue")

使用默认值设置bu将作为可选参数