将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; }
    }
}

将Json数据传递给MVC控制器

对于这个场景,您必须为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控制器。

谢谢!