我有一个名为 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()
答案 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 = {};
我希望这有帮助!