简体   繁体   English

将Json数据传递到MVC控制器

[英]Passing Json Data to MVC Controller

Here I need to pass Json object to the controller.But i have a problem in the MVC JsonResult controller area. 在这里我需要将Json对象传递给controller。但是我在MVC JsonResult控制器区域遇到问题。 I have no idea how to get those objects there. 我不知道如何将那些对象放在那里。 In ItemQtys there are multiple values. ItemQtys中有多个值。

My Code: 我的代码:

    $("#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 Controller: (I want to get the values to here) MVC控制器:(我想在此处获取值)

 public JsonResult SubmitCustomerOrder(OrdersModels model, int? id)
    {

        return Json(new {  });

    }

My model: 我的模特:

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

For this scenario you must add a custom model binder for OrdersModels and create your model from httprequest 对于这种情况,您必须为OrdersModels添加自定义模型活页夹,并通过httprequest创建模型

    public class OrderModelBinder : DefaultModelBinder
    {
        public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
         var userId=request.Form["UserId"];
          //ToDo
        }

Your Model does not have any properties that can be used to bind - you need something to assign values to which match the schema of the posted data. 您的模型没有可用于绑定的任何属性-您需要一些东西来分配与发布的数据的模式匹配的值。

If you change your controller method to accept UserId, DeliveryInstructions and ItemQtys as values, your routing should work - you can then use these values to create your object server side. 如果更改控制器方法以接受UserId,DeliveryInstructions和ItemQtys作为值,则路由应该起作用-然后可以使用这些值创建对象服务器端。

You can create a JavaScript object which has same fields in CustomerOrders class and pass it as a JSON object to controller on submit as below. 您可以创建一个JavaScript对象,该对象在CustomerOrders类中具有相同的字段,并将其作为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
    }
});

Controller can be as below. 控制器可以如下。

[HttpPost]
public JsonResult SubmitCustomerOrder(CustomerOrders customerOrders, int? id)
{
    return Json(new {  });
}

Please refer following post for more information. 请参考以下帖子以获取更多信息。

Pass Complex JavaScript Object to MVC Controller 将复杂的JavaScript对象传递给MVC控制器

It illustrates how we can pass complex javascript objects to MVC controller. 它说明了如何将复杂的javascript对象传递给MVC控制器。

Thanks ! 谢谢 !

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM