MVC 发布的对象数组 属性 由于字段而不是 属性 为空

MVC Posted array of objects property is null due to field, not property

昨晚,我创建了一个包含对象数组字段的模型,其中包含必需的属性。模型绑定在 GET 请求下正常工作,但当它回发时,除了这些数组的字段外,所有内容都返回到模型。 最初,我检查了语法,向该对象添加了 id,但其中 none 有效。 模型是:

    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; }
}

回答很尴尬。当我将字段更改为属性时,一切正常:

    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; }

我想,这是MVC中默认ModelBinder的一个bug。如果 ModelBinder 仅查看属性,则当模型 class 具有该字段而不是 属性 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>