【问题标题】:Passing multiple objects to my controller将多个对象传递给我的控制器
【发布时间】:2023-03-17 23:37:01
【问题描述】:

我将一个对象传递给我的控制器,如下所示:

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" }),

但复杂对象只是作为空值出现。有没有办法也可以传递对象和字符串?

【问题讨论】:

    标签: ajax asp.net-mvc


    【解决方案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");
        }
    });
    

    【讨论】:

    • 出于某种原因,我仍然需要对第一个 json 对象进行字符串化,否则我只会收到 500 个错误。但添加它似乎已经修复它。谢谢!
    【解决方案2】:

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

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

    在您的控制器方法中更改签名以包含 bu 的默认值,如下所示;

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

    使用默认值设置 bu 将充当可选参数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-11
      • 2019-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      相关资源
      最近更新 更多