Frage

Ich bin mit inkrementeller Sequenzierung für eine Sammlung von Objekten in einem Formular. Alle Werke schön und gut, außer wenn ich brauche DropDownListFor zu verwenden. Viele Fragen zur Bindung eines Drop-Down- und Auswahl des richtigen Wertes, was in Ordnung in meinem Fall funktioniert. Aber ich bin unklar, was sollte auf der Httppost Aktion in meinem Controller haben. Hier ist mein Code:

Modell

public class WorkRequestList
{
    public WorkRequest[] Requests { get; set; }
    public Vehicle[] Vehicles { get; set; }       
}

 <% using (Html.BeginForm()) {%>
     <% for (var i = 0; i < Model.Requests.Count(); i++) { %>
        <%=Html.DropDownListFor(x => x.Requests[i].AssignedTo,new SelectList(Model.Vehicles,"Id","Name",Model.Requests[i].AssignedTo.Id)) %>
      <%}%>
 <%=Html.SubmitButton("TopSubmit","Submit") %>
<%}%>

Veröffentlicht Aktion

[HttpPost]
public ActionResult Schedule(WorkRequestList form)
{
      //what goes here?
}

Die Drop-Down-Listen bevölkert bekommen nur gut, sie bekommen nur gut vorgewählt. Aber auf Post zurück form.Requests.AssignedTo ist null. Ich gehe davon aus dem Fahrzeug Id wieder irgendwo geschrieben wird, aber, wie ich das zu tun bekommen, ohne Rückgriff der Request Magie Saiten Schleife durch:

var id = Request["Requests[" + i + "].AssignedTo"];
War es hilfreich?

Lösung

Hier ist ein alternativer Ansatz, da ich nicht sub-Objekte entweder ohne explizite Modelbinder gebunden bekommen konnte:

definiert eine neue Klasse für Ihre Antwort:

public class WorkRequestResponse 
{
    public int AssignedTo { get; set; }
}

Auf der Seite ändern Sie es wie folgt: (I geändert Anfrage Workrequest)

<% for (var i = 0; i < Model.WorkRequest.Count(); i++)
       { %>
    <%=Html.DropDownListFor(x => x.WorkRequest[i].AssignedTo, new SelectList(Model.Vehicles, "Id", "Name", Model.WorkRequest[i].AssignedTo.Id))%>
    <%}%>

Auf dem Controller binden, wie folgt:

public ActionResult Index([Bind(Prefix = "WorkRequest")]List<WorkRequestResponse> AssignedTo)
{
    // AssignedTo is now populated
    WorkRequestList.WorkRequests = magic_assign_function(AssignedTo); 
    // manual model validation etc....
}

Ich wäre daran interessiert zu sehen, ob es ein direkterer Weg ist, da dies auch mir geplagt hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top