2017-03-03 39 views
0

昨晚,我创建了一个模型,其中包含对象数组的字段,其中包含必需的属性。模型绑定在GET请求中正常工作,但是当它返回时,所有事物都会回到模型中,排除这些数组的字段。 最初,我检查了语法,为这些对象添加了id,但没有一个能够工作。 型号为:MVC已发布数组对象属性为空,因为字段,而不是属性

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

回答

0

答案是尴尬。当我改变字段属性,everyting工作得很好:

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默认模型绑定器的一个bug。如果ModelBinder仅查找属性,则当该Model类具有该字段时,应该会引发错误,而不是属性IMO。因为,在我看来,我使用这些字段作为谓词,以便MVC知道什么是im绑定。

<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> 
+0

它不是一个错误。它的设计。 –

+0

所以我必须自己找到它。我认为这是一个糟糕的设计。如果我是设计师,我可能会抛出一个异常,说“你的模型有{0}字段,但它应该是一个绑定到视图的属性” –

+0

编写你自己定制的'ModelBinder'(你可以做任何你想做的事) –