c# - 嵌套对象未与服务器端模型映射
问题描述
我试图通过 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;
}
我的阿贾克斯电话:
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();
}
我面临的问题是能够从控制器获取主要模型详细信息,但是嵌套对象字段为空,我是否缺少某些内容。我是否需要对嵌套属性的 GET SET 做任何事情。我尝试将数据作为 JSON 字符串发送仍然得到相同的结果。
请找到 chrome 控制台日志
解决方案
您当前正在执行 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
:
[HttpPost]
public ActionResult SaveSales([FromBody] SalesViewModel m)
{
// ...
}
推荐阅读
- angular - 在服务中使用地图运算符并在组件中订阅时的 RxJS BehaviouSubject
- jquery - jQuery 错误:$(...).modal 不是函数
- laravel - 数据库 laravel 发生变化时刷新视图内容
- elasticsearch - 嵌套字段上的聚合,嵌套字段属性上的 fielddata=true
- kong - Kong GCP setup initiating weekly migrations which is breaking the datastore and admin access
- angular - 使用 http.get 时如何获取非 http 状态码?
- group-by - DAX:先区分然后聚合两次
- javascript - 我怎样才能画出完美的多重线螺旋与循环和点?
- hyperledger-fabric - 在 Hyperledger fabirc 中从 kafka 迁移到 RAFT 时出错
- java - 具有动态大小的 Java 整数数组