我正在尝试通过AJAX将嵌套对象发送到我的mvc控制器。 我的数据集如下。
function GetValuesForSave() {
var model = {
Partycode: "x",
DocDate: new Date(),
DocNo: 1,
SaleItems: {
StockCode:'',
Amount: 1,
DiscPerc: 1,
DiscAmount: 1,
Qty: 1,
Rate: 1,
Description: '',
Unit: ''
}
}
return model;
}
我的Ajax呼叫:
var datatosend=GetValuesForSave();
$.ajax({
url: "/Sales/SaveSales/",
data: datatosend,
success: function() {
alert("success");
},
error: function() {
alert("failure");
}
});
我的模型结构:
public class SalesViewModel
{
public string Partycode { get; set; }
public DateTime DocDate { get; set; }
public int DocNo { get; set; }
private SaleItem _saleItem;
public SaleItem SaleItems { get; set; }
}
public class SaleItem
{
public string StockCode { get; set; }
public string Description { get; set; }
public string Unit { get; set; }
public double Qty { get; set; }
public double Rate { get; set; }
public double DiscPerc { get; set; }
public double DiscAmount { get; set; }
public double Amount { get; set; }
}
我的控制器方法:
public ActionResult SaveSales(SalesViewModel m)
{
var data = sale;
return View();
}
面临的问题是能够从控制器中获取主要模型的详细信息,但是如果缺少某些对象,则嵌套对象字段为null。 我是否需要使用嵌套属性的GET SET做任何事情。我尝试将数据作为JSON字符串发送仍然得到相同的结果。
请找到Chrome控制台日志
答案 0 :(得分:2)
您当前正在执行GET请求。因此,jQuery的ajax
方法试图将data
解释为查询字符串,这就是为什么在控制器方法中仅获得“顶级”键值对的原因。
为使其正常工作,您需要将对此的ajax
调用修改为:
$.ajax({
type: "POST", // perform POST request
url: "/Sales/SaveSales/",
data: JSON.stringify(datatosend), // serialize your data into JSON
contentType: "application/json", // tell server to interpret data as JSOn
success: function() {
alert("success");
},
error: function() {
alert("failure");
}
});
在您的控制器中,您还必须指定m
应从POST请求的正文中获取,方法是将端点标记为HttpPost
,并用FromBody
标签注释参数:< / p>
[HttpPost]
public ActionResult SaveSales([FromBody] SalesViewModel m)
{
// ...
}
答案 1 :(得分:1)