如何通过Ajax将复杂对象发布到MVC 4控制器?

时间:2014-04-09 16:03:30

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

我有一个名为 DrawDie 的对象,其中包含以下属性:

ID
PlantID : int
QtyOnHand : int
SizeUS : double
SizeMetric : double
CaseSize : string
Style : string

我有一个名为 DieOrder 的对象,其中包含以下属性:

ID : int
DrawDie : DrawDie
DrawDieID : int
PlantID : int
PurchaseOrder : string
Qty : int

我想通过Ajax请求将我的对象发布到MVC控制器。我宁愿不使用第三方库。我试图像这样发布:

        var DieOrder = new Object();
        var DrawDie = new Object();

        DieOrder.Qty = $("#Qty").val();
        DieOrder.DrawDieID = $("#DrawDieID").val();


        DrawDie.CaseSize = $("#DrawDie_CaseSize").val();
        DrawDie.Qty = $("#Qty").val();          
        DrawDie.ID = dieID;
        DrawDie.QtyOnHand = 0;
        DrawDie.SizeUS = $("#DrawDie_SizeUS");
        DrawDie.SizeMetric = $("#DrawDie_SizeMetric");
        DrawDie.PlantID = $("#PlantID").val();
        DrawDie.IsTransfer = "N";

        DieOrder.PlantID = $("#PlantID").val();
        DieOrder.OrderedBy = $("#OrderedBy").val();
        DieOrder.PurchaseOrder = $("#PurchaseOrder").val();
        DieOrder.DrawDie = DrawDie;


        $.ajax({
            url: "Order/OrdDie",
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            data: JSON.stringify(DieOrder),
            success: handleData


        });

    });

我有两个问题。一,是我的接近方式还是没关系?我收到UncaughtType错误:将循环结构转换为JSON。我如何重组我的请求,所以我没有得到这样的错误?我不确定为什么会收到这个错误。

由于

更新

 DrawDie.SizeUS = $("#DrawDie_SizeUS").val();
 DrawDie.SizeMetric = $("#DrawDie_SizeMetric").val();

我错过了.val()

2 个答案:

答案 0 :(得分:1)

您真正遇到的问题是您的控制器正在将DieOrder对象的所有内容解释为控制器操作的参数。

如果你的控制器动作看起来像这样......

[HttpPost]
public void OrdDie(OrderDieViewModel model)
{
    // Some operations
}

...然后您的字符串化的数据应如下所示:

{
    'model': DieOrder
}

...所以,在进行$.ajax来电之前,你真的错过了一步:

var DrawDie = {
    // Properties...
};

var DieOrder = {
    // Properties...
    'DrawDie': DrawDie
};

var data = {
    'model': DieOrder
};

$.ajax({
    // Spec object here.
});

总之?您的数据对象的内容必须与您正在调用的操作的参数列表匹配。这意味着如果您只将模型传递给JSON操作,则您的数据对象必须只有一个成员:JavaScript表示形式那个模型对象。

答案 1 :(得分:0)

尝试添加dataType:' json'你的ajax请求:

$.ajax({
    url: "Order/OrdDie",
    type: 'POST',
    cache: false,
    data: JSON.stringify(_data),
    dataType: 'json',
    contentType: 'application/json',
    success: handleData
});

此外,您可以像这样初始化JS对象:

var DieOrder = {};
var DrawDie = {};

我希望这有帮助!