【问题标题】:Passing Json Data to MVC Controller将 Json 数据传递给 MVC 控制器
【发布时间】:2014-07-14 11:15:43
【问题描述】:

这里我需要将 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 中没有看到您的模型......
  • 再次,参数仍然与您的控制器 POST 操作不匹配。我的意思是您没有序列化绑定到模型的表单,或者您没有在客户端构建模型结构然后发布到控制器操作。

标签: c# asp.net-mvc json asp.net-mvc-4


【解决方案1】:

对于这种情况,您必须为 OrdersModels 添加自定义模型绑定器并从 httprequest 创建模型

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

【讨论】:

    【解决方案2】:

    您的模型没有任何可用于绑定的属性 - 您需要分配与发布数据的架构匹配的值。

    如果您更改控制器方法以接受 UserId、DeliveryInstructions 和 ItemQtys 作为值,您的路由应该可以工作 - 然后您可以使用这些值来创建您的对象服务器端。

    【讨论】:

      【解决方案3】:

      您可以在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 {  });
      }
      

      请参阅以下帖子以获取更多信息。

      Pass Complex JavaScript Object to MVC Controller

      它说明了我们如何将复杂的 javascript 对象传递给 MVC 控制器。

      谢谢!

      【讨论】:

        猜你喜欢
        • 2017-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多