2017-03-03 1 views
0

Letzte Nacht habe ich ein Modell erstellt mit Feldern von Arrays von Objekten, die Eigenschaften innerhalb benötigt hat. Die Modellbindung funktionierte bei der GET-Anforderung korrekt, aber wenn sie zurückgeschickt wird, kommt alles wieder zurück, um die Felder dieser Arrays zu modellieren. Zunächst überprüfte ich die Syntax, fügte diesen Objekten IDs hinzu, aber keine funktionierte. Modell war:MVC Posted Array von Objekten Eigenschaft ist Null aufgrund von Feld, nicht Eigenschaft

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

und diese Objekte war ValueHolders:

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

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

Antwort

0

Die Antwort war umständlich. Wenn ich Felder Eigenschaften geändert, arbeitete every fein:

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

Ich denke, dies ist ein Fehler von Standard-Modelbinder in MVC ist. Wenn ModelBinder nur nach Eigenschaften suchte, sollte es Fehler ausgeben, wenn diese Modellklasse dieses Feld anstelle der Eigenschaft IMO aufweist. Weil ich diese Felder meiner Meinung nach als Prädikate verwende, so dass MVC sich dessen bewusst war, was bindend ist.

<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

Es ist kein Fehler. Es ist von Entwurf. –

+0

Also musste ich es selbst finden. Es ist meiner Meinung nach ein schlechtes Design. Wenn ich der Designer wäre, würde ich wahrscheinlich eine Ausnahme sagen, dass "Ihr Modell hat {0} Feld, aber es sollte eine Eigenschaft sein, um zu sehen" –

+0

Schreiben Sie Ihre eigenen benutzerdefinierten 'ModelBinder' (Sie können alles tun, was Sie wollen) –

Verwandte Themen