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>
昨晚,我创建了一个包含对象数组字段的模型,其中包含必需的属性。模型绑定在 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>