Модель Binder в ASP.Net MVC 3 не работает - PullRequest
0 голосов
/ 05 октября 2011

У меня проблема с привязкой данных, отправленных с моделью.То, что я хотел бы связать - это OrderStatus, который, даже если я передаю его 10, всегда превращается в 0. Я не знаю почему.Я выделил эту часть жирным шрифтом, чтобы ее было легче обнаружить в коде:

Данные, отправленные в формате 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
    }

1 Ответ

0 голосов
/ 05 октября 2011

На первый взгляд проблема, которую я вижу, заключается в том, что вы отправляете «OrderStatusName», но это свойство имеет только функцию get , а не set .

Я не исследовал остальную часть кода или проверял это; но если у вас нет SET для OrderStatusName, он не будет работать.

Вы можете либо отправить в OrderStates (который имеет оба get; set;), либо реализовать набор в OrderStatusName, что я бы не рекомендовал, так как это не очень хорошая практика.

Надеюсь, это поможет, -covo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...