Domanda

sequenziamento incrementale per una collezione di oggetti in una forma. Tutto funziona bene e dandy, tranne quando ho bisogno di usare DropDownListFor. Un sacco di domande riguardanti l'associazione di una discesa e selezionando il valore corretto, che sta lavorando bene nel mio caso. Comunque sono poco chiare su ciò che si suppone di avere sull'azione HttpPost nel mio controller. Ecco il mio codice:

Modello

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

Visualizza

 <% 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") %>
<%}%>

Inviato Azione

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

Gli elenchi a discesa vengono popolate bene, ottengono preselezionato bene. Ma sul palo form.Requests.AssignedTo è nullo. Sto assumendo il Numero identificativo viene inviato indietro da qualche parte, ma come faccio arrivare a questo senza ricorrere scorrendo le Request corde magiche:

var id = Request["Requests[" + i + "].AssignedTo"];
È stato utile?

Soluzione

Ecco un approccio alternativo, come non ho potuto ottenere oggetti sub legato o senza un esplicito modelbinder:

definire una nuova classe per la risposta:

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

Nella pagina cambia come segue: (ho cambiato richiesta di 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))%>
    <%}%>

Sul bind controller come segue:

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

Sarei curioso di vedere se c'è un percorso più diretto, come questo mi ha afflitto anche.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top