Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax 将多个对象传递到我的控制器_Ajax_Asp.net Mvc - Fatal编程技术网

Ajax 将多个对象传递到我的控制器

Ajax 将多个对象传递到我的控制器,ajax,asp.net-mvc,Ajax,Asp.net Mvc,我正在向控制器传递一个对象,如下所示: var form = JSON.stringify({ "subRevisedRequest": $('#frmRevised').val(), "subSubcontractor": $('#frmSubcontractor').val(), "subDescription": $('#frmDesc').val(), "subCostCode": $('#frmCostCode').val

我正在向控制器传递一个对象,如下所示:

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出现。是否有一种方法可以同时传递对象和字符串?

尝试在已有的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");
    }
});

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

data: { "s" : form, "bu" : "251" }
public ActionResult CreateSubcontracts(RoutingSubcontracts s, string bu = "NoValue")
在控制器方法中,更改签名以包含bu的默认值,如下所示

data: { "s" : form, "bu" : "251" }
public ActionResult CreateSubcontracts(RoutingSubcontracts s, string bu = "NoValue")

设置默认值后,bu将像一个可选参数一样

出于某种原因,我仍然需要严格处理第一个json对象,否则我只会收到500个错误。但加上它似乎已经解决了这个问题。谢谢