2014-12-31 7 views
0

I가 다음과 같은 구조체를 포함하는 뷰 모델 :ModelBinding 문제

public struct PricesAndDiscounts 
{ 
    public decimal FlatOff; 
    public decimal UnitPrice; 
    public decimal TotalDiscount; 
    public decimal TotalOptions; 
    public decimal TotalOrderPrice; 
} 

뷰 모델은 인 DisplayRowPriceViewModel의 구성원 인 형 PricesAndDiscounts의 속성이되도록 계층 구조에 ManageOrderEditModel의 멤버 :
-ManageOrderEditModel
- DisplayRowPriceViewModel.

요청의 "모양은"나는 (양식 항목의 피들러 스크린 샷 참조) 원하고 기대하는 것처럼 정확하게 :

enter image description here

그러나 서버에서 기본 ModelBinder를이 구조체로 인스턴스화 각 구성원의 0. ViewModel의 다른 모든 것들은 문제없이 ModelBinder에 의해 만들어졌습니다.

사용자 정의 구조체에 대한 사용자 정의 ModelBinder를 만들어야합니까?

편집 - 추가 자세한 내용은
서명은이 :

public ActionResult ManageOrder([FromBody]ManageOrderEditModel model) 

나는 FromBody 속성없이 그것을 시도했습니다. 또한, PricesAndDiscounts가 struct라는 사실은 문제가 아닙니다. 저는 이것을 수업으로 바꾸었고 모든 구성원이 Fiddler에서 양식에서 볼 수있는 가치 대신 0으로 왔습니다.

ManageOrderEditModel

public class ManageOrderEditModel 
{ 
    public DisplayOptionsInDropDownViewModel DisplayOptionsInDropDownViewModel { get; set; } 
    public DisplayRowPriceViewModel DisplayRowPriceViewModel { get; set; } 

    public int ID { get; set; } 
    public int RegType { get; set; } 
} 

DisplayRowPriceViewModel

public class DisplayRowPriceViewModel 
{ 
    public Discount Discount { get; set; } 
    public int NumberOfAdditionalLocations { get; set; } 
    public OrderStatus OrderStatus { get; set; } 
    public double Price { get; set; } 
    public PricesAndDiscounts PricesAndDiscounts { get; set; } 
    public RegType RegistrationType { get; set; } 
    public decimal RowPrice { get; set; } 
} 
+0

조치 방법 서명을 공유 할 수 있습니까? 나는 당신이 그것에 게시하고 있다고 가정합니다. –

+0

@Imran 나는 더 많은 정보를 가지고 게시물을 편집했다. 건배. – onefootswill

+0

API 컨트롤러입니까? – haim770

답변

4

은 당신과 같이 속성 대신 필드를 작성해야합니다.

+0

그건 절대적으로 효과가 있습니다. 감사. 구조체에 속성을 추가 할 생각은 전혀 없었습니다. – onefootswill

1

당신이 그것을 어떻게했는지 잘 모르겠습니다 그러나 당신이 데이터를 전달하는 방식에 문제가 있음을 보인다.

나는 당신과 동일한 모델을 만들었고 구조를 성공적으로 만들고 값을 할당했습니다.

그럼 저는 PostMan을 사용하고 있습니다.

여기 제가 부르는 방식입니다.

enter image description here

여기 결과 (I는 JSON으로 데이터를 전달).

enter image description here

이 또 다른 솔루션은 구조 대신 속성 필드를 확인한다. @Imaran Rashid가 제안했습니다.

public struct PricesAndDiscounts 
{ 
    public decimal FlatOff { get; set; } 
    public int UnitPrice { get; set; } 
    public decimal TotalDiscount { get; set; } 
    public decimal TotalOptions { get; set; } 
    public decimal TotalOrderPrice { get; set; } 
} 

을 그리고 희망이 작동합니다