2011-10-05 122 views
0

我遇到了绑定随模型一起发送的数据的问题。 我想要绑定的是OrderStatus,即使我通过了它,它总是变成0. 我不知道为什么。我做了这部分加粗,使其更容易在代码中发现:ASP.Net中的模型绑定器MVC 3不起作用

发送的数据为JSON:

{"CustomerOrderHeader":{"OrderNumber":"5", 
    "PartnerName":"BLI", 
    "Reference":"", 
    "ShippingDate":"10/152011", 
    "OrderStatusName":"Approved", 
    "CustomerOrderHeader.OrderStatus":"10", 
    "TotalAmount":"16.00", 
    "CustomerOrderHeader.CurrencyId":"0", 
    "CustomerOrderHeader.LanguageId":"0", 
    "DaLine1":"", 
    "DaLine2":"", 
    "DaCity":"", 
    "DaPostalCode":"", 
    "DaState":"", 
    "DaCountry":"", 
    "BaLine1":"", 
    "BaLine2":"", 
    "BaCity":"", 
    "BaPostalCode":"", 
    "BaState":"", 
    "BaCountry":"", 
    "Notes":""}, 
    "CustomerOrderLines":[{"Id":214,"Num":10,"PartNumber":"dasdasd","Description":"dadadasd","OrderedQty":4,"UoM":"inteee","SalesPrice":null,"Amount":16,"LineStatus":10,"ConfirmedShippingDate":null,"ReservedQty":0,"DeliveredQty":0,"RemainingQty":4}]} 

方法签名:

[HttpPost] 
public JsonResult SaveOrUpdateOrderLines(CustomerOrderModel customerOrderModel) 

和模型:

public class CustomerOrderModel 
{ 
    public CustomerOrderModel() 
    { 
     this.CustomerOrderLines = new List<CustomerOrderLineModel>(); 
     this.CustomerOrderHeader = new CustomerOrderHeaderModel(); 
    } 

    public CustomerOrderHeaderModel CustomerOrderHeader 
    { get; set; } 

    public List<CustomerOrderLineModel> CustomerOrderLines 
    { get; set; } 

} 

客户订购列表型号:

public class CustomerOrderLineModel 
    { 
     public CustomerOrderLineModel() 
     { 

     } 

     //TODO: Uncomment it 
     public long Id { get; set; } 

     [Required] 
     public String Num 
     { 
      get; 
      set; 
     } 

     //[ExistsOrEmptyPartNum(ErrorMessage = "The Part Number doesn't exist")] 
     //[Required] 
     [ExistInventoryPartNumOrNullAttribute] 
     public String PartNumber { get; set; } 

     public String Description { get; set; } 


     [Numeric(ErrorMessage = "Should be a number")] 
     [Min(0, ErrorMessage = "The number should be greater than zero")] 
     [IsTheSameTypeOfUOM("UnitOfMeasureId")] 
     public String OrderedQty { get; set; } 


     public String UoM { get; set; } 
     public long? UnitOfMeasureId { get; set; } 

     [Numeric(ErrorMessage = "Should be a number")] 
     public String SalesPrice { get; set; } 

     //[Numeric(ErrorMessage = "Should be a number")] 
     //[Min(0, ErrorMessage = "The number should be greater than zero")] 
     public String Amount { get; set; } 

     public String LineStatus { get; set; } 


     private int? _lineStatusNum; 

     public int? LineStatusNum 
     { 
      get 
      { 
       if (this.LineStatus == "Draft") 
       { 
        _lineStatusNum = 0; 
        return _lineStatusNum; 
       } 
       _lineStatusNum = null; 
       return null; 
      } 
      set 
      { 
       if (value == 0) 

       { 
        _lineStatusNum = value; 
        this.LineStatus = "Draft"; 
       } 
       if (value == 10) 
       { 
        _lineStatusNum = value; 
        this.LineStatus = "Approved"; 
       } 
      } 
     } 
     public DateTime? ConfirmedShippingDate { get; set; } 

     [Numeric(ErrorMessage = "Should be a number")] 
     public String ReservedQty { get; set; } 
     [Numeric(ErrorMessage = "Should be a number")] 
     public String DeliveredQty { get; set; } 
     [Numeric(ErrorMessage = "Should be a number")] 
     public String RemainingQty { get; set; } 

     public CustomerOrderHeader CustomerOrderHeader { get; set; } 


    } 

客户订单头型号:

public class CustomerOrderHeaderModel 
    { 
     public class CustomDropDown 
     { 
      public CustomDropDown(object dataValue, string displayValue) 
      { 
       this.DataValue = dataValue; 
       this.DisplayValue = displayValue; 
      } 

      public object DataValue { get; set; } 
      public string DisplayValue { get; set; } 
     } 

     public CustomerOrderHeaderModel() 
     { 
      this.CurrencyId = 0; 
      this.TotalAmount = 0; 
      this.LanguageId = 0; 

      this.LanguageTypeList = new List<CustomDropDown> 
             { 
              new CustomDropDown(0, "English (Local Language)") 
             }; 

      this.CurrencyTypeList = new List<CustomDropDown> 
             { 
              new CustomDropDown(0, "EUR (Local Currency)") 
             }; 
     } 


     //public CustomerOrderHeaderModel(int orderStatus, long totalAmount) 
     //{ 
     // this.OrderStatus = orderStatus; 
     // this.TotalAmount = totalAmount; 
     //} 

     #region Implementation of ICustomerOrderHeader 

     //public long CompanyId 
     //{ get; set; } 

     public string BillingAddress 
     { get; set; } 

     public string ShippingAddress 
     { get; set; } 

     [DisplayName("Customer name*:")] 
     [Required] 
     public string PartnerName 
     //public string CustomerName 
     { get; set; } 

     [DisplayName("Order Number :")] 
     public long? OrderNumber 
     { get; set; } 



[DisplayName("Order Status :")] 
public int OrderStatus 
    { get; set; } 

     public string OrderStatusName 
     { get 
       { 
        switch (OrderStatus) 
        { 
         case 0: 
          return "Draft"; 
         case 10: 
          return "Approved"; 
         case 20: 
          return "Ready for shipping"; 
         case 30: 
          return "In Progress"; 
         case 40: 
          return "Delivered"; 
         case 50: 
          return "Closed"; 
         case 60: 
          return "Cancelled"; 
         default: 
          return "Undefinied"; 
        } 
       } 
     } 

     [DisplayName("Shipping Date :")] 
     //[Range(typeof(DateTime), "01/01/1753", "12/31/9999", ErrorMessage = "Value for {0} must be between {1} and {2}")] 
     [DateRange] 
     //[DataType(DataType.Date, ErrorMessage = "Please enter a valid date in the format dd/mm/yyyy")] 
     //[Range(typeof(DateTime), "01/01/1753", "12/31/9999", ErrorMessage = "Please enter a valid date in the format dd/mm/yyyy")] 
     public DateTime? ShippingDate 
     { get; set; } 

     [DisplayName("Reference :")] 
     public string Reference 
     { get; set; } 

     public Partner Partner 
     { get; set; } 

     [DisplayName("Description :")] 
     public string Description 
     { get; set; } 

     [DisplayName("Address Line 1 :")] 
     public string AddressLine1 
     { get; set; } 

     [DisplayName("Address Line 2 :")] 
     public string AddressLine2 
     { get; set; } 

     [DisplayName("City :")] 
     public string City 
     { get; set; } 

     [DisplayName("Postal Code :")] 
     public string PostalCode 
     { get; set; } 

     [DisplayName("State :")] 
     public string State 
     { get; set; } 

     [DisplayName("Country :")] 
     public string Country 
     { get; set; } 

     public bool IsDefaultda 
     { get; set; } 

     public bool IsDefaultba 
     { get; set; } 

     [DisplayName("Currency :")] 
     public long CurrencyId 
     { get; set; } 

     [DisplayName("Language :")] 
     public long LanguageId 
     { get; set; } 

     [DisplayName("Total Amount :")] 
     public decimal TotalAmount 
     { get; set; } 

     [DisplayName("Address Line 1 :")] 
     public string DaLine1 
     { get; set; } 

     [DisplayName("Address Line 2 :")] 
     public string DaLine2 
     { get; set; } 

     [DisplayName("City :")] 
     public string DaCity 
     { get; set; } 

     [DisplayName("Postal Code :")] 
     public string DaPostalCode 
     { get; set; } 

     [DisplayName("State :")] 
     public string DaState 
     { get; set; } 

     [DisplayName("Country :")] 
     public string DaCountry 
     { get; set; } 

     [DisplayName("Address Line 1 :")] 
     public string BaLine1 
     { get; set; } 

     [DisplayName("Address Line 2 :")] 
     public string BaLine2 
     { get; set; } 

     [DisplayName("City :")] 
     public string BaCity 
     { get; set; } 

     [DisplayName("Postal Code :")] 
     public string BaPostalCode 
     { get; set; } 

     [DisplayName("State :")] 
     public string BaState 
     { get; set; } 

     [DisplayName("Country :")] 
     public string BaCountry 
     { get; set; } 

     [DisplayName("Notes :")] 
     public string Notes 
     { get; set; } 


     public List<CustomDropDown> CurrencyTypeList { get; set; } 
     public List<CustomDropDown> LanguageTypeList { get; set; } 
     public List<CustomDropDown> OrderStatusTypeList { get; set; } 

     #endregion 
    } 

回答

0

第一眼我看到的问题是,你正在发送“OrderStatusName”,但财产只有一个得到功能,而不是一个设置

我还没有检查其余的代码或测试过;但是如果你没有OrderStatusName的SET,它将不起作用。

你可以发送OrderStates(它既有get; set;),也可以实现set到OrderStatusName,我不会推荐这是不好的做法。

希望这会有帮助, -covo