MVC Опубликованный массив объектов имеет значение null из-за поля, а не свойства

Прошлой ночью я создал модель, содержащую поля массивов объектов, которая имеет требуемые свойства внутри. Привязка модели работала корректно при запросе GET, но когда она была отправлена ​​обратно, все возвращается к модели, за исключением полей этих массивов. Сначала я проверил синтаксис, добавил идентификаторы к этим объектам, но ни один из них не работал. Модель была:

    public class RateEditVM
{
    [Required(ErrorMessage = "IDF boş geçilemez!")]
    public int? FK_ITH_IDFID { get; set; }

    [Required(ErrorMessage = "Mal Bedeli boş geçilemez!")]
    public decimal? GoodsPrice { get; set; }

    [Required(ErrorMessage = "İlk kur boş geçilemez!")]
    public decimal? GGBRate { get; set; }

    [Required(ErrorMessage = "Mal Bedeli (TL) boş geçilemez!")]
    public decimal? GoodsPriceTL { get; set; }

    public RateValueHolder[] ShippingExpenseValues ;
    public RateValueHolder[] InsuranceExpenseValues;
    public RateValueHolder[] BankExpenseValues ;
    public RateValueHolder[] CustomsExpenseValues;
    public RateValueHolder[] LocalExpenseValues;

    [Required(ErrorMessage = "Diğer Masraflar boş geçilemez!")]
    public decimal? OtherExpense { get; set; }

    [Required(ErrorMessage = "Toplam Masraflar boş geçilemez!")]
    public decimal? TotalExpense { get; set; }

    [Required(ErrorMessage = "Toplam Tutar boş geçilemez!")]
    public decimal? Total { get; set; }

    [Required(ErrorMessage = "Son Kur boş geçilemez!")]
    public decimal? RateCalculated { get; set; }
}

и эти объекты были ValueHolders:

    public class RateValueHolder
{
    [Required(ErrorMessage = "Boş geçilemez!")]
    public decimal? Value { get; set; }

    public int ID { get; set; }
    public string Description { get; set; }
}

1 ответ

Решение

Ответ был неловким. Когда я изменил поля на свойства, все работало нормально:

    public RateValueHolder[] ShippingExpenseValues { get; set; }
    public RateValueHolder[] InsuranceExpenseValues { get; set; }
    public RateValueHolder[] BankExpenseValues { get; set; }
    public RateValueHolder[] CustomsExpenseValues { get; set; }
    public RateValueHolder[] LocalExpenseValues { get; set; }

Я думаю, это ошибка по умолчанию ModelBinder в MVC. Если ModelBinder ищет только свойства, он должен выдавать ошибки, когда этот класс Model имеет это поле, а не свойство IMO. Потому что, на мой взгляд, я использую эти поля в качестве предикатов, чтобы MVC знал, что я связываю.

<fieldset class="col-xs-12">
<legend>Nakliye Masrafları</legend>
@for (var i = 0; i < Model.ShippingExpenseValues.Length; i++)
{
    @Html.EditorFor(e => e.ShippingExpenseValues[i]);
}
</fieldset>
Другие вопросы по тегам