将Json数据传递给MVC控制器
本文关键字:MVC 控制器 Json 数据 | 更新日期: 2023-09-27 18:12:52
这里我需要将Json对象传递给控制器。但我有一个问题在MVC JsonResult控制器区域。我不知道怎么把这些东西弄到那里。ItemQtys中有多个值。
我代码: $("#btnSubmit").click(function (e) {
var itemQtys = [];
var currentQty;
$('input.input-qty').each(function (itm) {
currentQty = $(this).val();
if (!isNaN(currentQty) && currentQty != '') {
currentQty = parseInt(currentQty);
itemQtys.push({
ItemId: $(this).attr('data-id'),
Qty: currentQty
});
}
});
var data = {
UserId: $("#CustomerName option:selected").val(),
DeliveryInstructions: $('#DeliveryInstructions').val(),
ItemQtys: itemQtys
};
$.ajax({
type: "POST",
url: "/Orders/SubmitCustomerOrder",
contentType: "application/; charset=utf-8",
dataType: "json",
data: data,
async: false,
success: function (msg) {
if (msg.length > 0) {
$.each(function (response) {
//$("#Result").text(response.text);
});
}
}
});
});
MVC控制器:(我想要得到这里的值)
public JsonResult SubmitCustomerOrder(OrdersModels model, int? id)
{
return Json(new { });
}
我的模型:
public class OrdersModels : DbContext
{
public class CustomerOrders
{
public int CustomerOrderId { get; set; }
//public int CustomerId { get; set; }
public DateTime OrderDate { get; set; }
public DateTime DeliveryDate { get; set; }
public string DeliveryInstructions { get; set; }
public int Status { get; set; }
public int Customer_Supplier_CustomerSupplierId { get; set; }
public DateTime ModifiedDate { get; set; }
public Guid ModifiedBy { get; set; }
public bool IsActive { get; set; }
public List<OrderItems> OrderItemList { get; set; }
}
public class OrderItems
{
public int OrderItemsId { get; set; }
public int Products_ProductId { get; set; }
public int CustomerOrders_CustomerOrderId { get; set; }
public int Quantity { get; set; }
public DateTime ModifiedDate { get; set; }
public Guid ModifiedBy { get; set; }
public bool IsActive { get; set; }
}
}
对于这个场景,您必须为OrdersModels添加一个自定义模型绑定器,并从httprequest
创建您的模型 public class OrderModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var userId=request.Form["UserId"];
//ToDo
}
您的模型没有任何可用于绑定的属性-您需要一些与发布数据的模式匹配的值。
如果你改变你的控制器方法接受UserId, DeliveryInstructions和ItemQtys作为值,你的路由应该工作-然后你可以使用这些值来创建你的对象服务器端
你可以在CustomerOrders
类中创建一个具有相同字段的JavaScript对象,并在提交时将其作为JSON对象传递给控制器。
var customerOrders= {};
// fill the object.
$.ajax(
{
url: 'Controller/SubmitCustomerOrder/',
data: JSON.stringify({customerOrders: customerOrders, id : id }),
contentType: 'application/json',
dataType: 'json',
type: 'POST',
success: function (data) {
// success
},
error: function () {
// error
}
});
控制器可如下图所示。
[HttpPost]
public JsonResult SubmitCustomerOrder(CustomerOrders customerOrders, int? id)
{
return Json(new { });
}
更多信息请参考以下文章。
将复杂JavaScript对象传递给MVC控制器
它说明了我们如何将复杂的javascript对象传递给MVC控制器。
谢谢!