2016-03-22 7 views
0

So habe ich ein Formular, das ich versuche einzureichen, und ich kann entweder die Liste oder das Modell zu binden, aber nicht beide zur gleichen Zeit. Ich vermute, dass es mit dem Modellbinder zu tun hat.Listenbindung mit Modelldaten

HTML

@using (Html.BeginForm("Index", "Home", FormMethod.Post)){ 
    @Html.AntiForgeryToken() 
    <div class="TransferHeader"> 
     <div> 
      @Html.LabelFor(model => model.tranRequestedBy) 
      @Html.EditorFor(model => model.tranRequestedBy, new { @Name = "h.tranRequestedBy" }) 
     </div> 
     <div> 
      @Html.LabelFor(model => model.tranNotes) 
      @Html.EditorFor(model => model.tranNotes, new { @Name = "h.tranNotes" }) 
     </div> 
     <input name="h.TransfersDetail.Index" id="detIndex" type="hidden" value="c3a3f7dd-41bb-4b95-b2a6-ab5125868adb"> 
     <input name="h.TransfersDetail[c3a3f7dd-41bb-4b95-b2a6-ab5125868adb].detToolCode" id="detToolCode" type="hidden" value="1234"> 
    </div> 
} 

-Controller

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Index(TransfersHeader h) 
{ 
    return View(); 
} 

Model-Klasse:

public virtual ICollection<TransfersDetail> TransfersDetail { get; set; } 
public string tranRequestedBy { get; set; } 
public string tranNotes { get; set; } 

Die beiden unteren Eingänge von einem AJAX-Aufruf zu einem Add-Methode erzeugt wurden, was passiert ist, wenn sie sind nicht vorhanden die beiden HTML-Helfer-Editoren werden in das Modell kommen, aber wenn sie nur die Übertragung existieren Detailliste wird angezeigt. Kann ich irgendetwas tun, um sicherzustellen, dass alle Daten in das Modell gelangen?

Antwort

0

Es ist nicht klar, wie Sie diese Eingaben generieren, aber die name Attribute sind falsch. Sie Modell enthält keine Sammlung Eigenschaft namens h, aber es enthält eine TransfersDetail benannt, so dass Ihre Eingaben

<input name="TransfersDetail.Index" type="hidden" value="c3a3f7dd-41bb-4b95-b2a6-ab5125868adb"> 
<input name="TransfersDetail[c3a3f7dd-41bb-4b95-b2a6-ab5125868adb].detToolCode" type="hidden" value="1234"> 

Es ist auch nicht klar sein müssen, warum Sie ein id Attribut hinzugefügt (wenn Sie Kollektionsteile in jQuery Referenzierung , Sie wären besser dran mit Klassennamen und relativen Selektoren), aber die id Ihre Verwendung hat keinen Indexer darauf hindeutet, dass Sie doppelte id Attribute generieren wird, die ungültige HTML ist (und jQuery Selektoren würde in keinem Fall funktionieren)

+0

Danke, das hat funktioniert, ich habe das Listenelement nach der Erwartung des Controllers benannt h. – Herrozerro