2014-07-14 6 views
0

여기 컨트롤러에 Json 객체를 전달해야합니다. 그러나 MVC JsonResult 컨트롤러 영역에 문제가 있습니다. 나는 그 물건들을 거기에서 어떻게 얻는 지 전혀 모른다. ItemQtys에는 여러 값이 있습니다.MVC 컨트롤러에 Json 데이터 전달

내 코드 :

$("#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; } 
    } 
} 
+2

매개 변수가 전달하는 데이터와 일치하지 않습니다. 내가 게시하는 JSON에서 모델을 보지 못했습니다 .... –

+0

OP가 ..... – TechGuy

+0

으로 다시 업데이트되었지만 여전히 매개 변수가 컨트롤러 POST 동작과 일치하지 않습니다. 내가 말하고있는 것은 모델에 바인딩 된 폼을 직렬화하지 않는다는 것입니다. 그렇지 않으면 클라이언트 측에서 모델 구조를 구성하지 않아서 컨트롤러 동작에 게시됩니다. –

답변

0

당신은 추가해야합니다 OrdersModels 용 사용자 정의 모델 바인더 및 httprequest에서 모델 작성

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

모델에는 바인딩에 사용할 수있는 속성이 없습니다. 게시 된 데이터의 스키마와 일치하는 값을 할당하기 위해 뭔가가 필요합니다.

UserId, DeliveryInstructions 및 ItemQtys를 값으로 허용하도록 컨트롤러 메소드를 변경하면 라우팅이 작동해야합니다. 그런 다음이 값을 사용하여 객체 서버 측을 만들 수 있습니다.

0

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

은 우리가 MVC 컨트롤러에 복잡한 자바 스크립트 개체를 전달할 수있는 방법을 보여줍니다.

감사합니다.

관련 문제