Question

J'utilise séquençage supplémentaire pour une collection d'objets sous une forme. Tout fonctionne très bien et dandy, sauf quand je dois utiliser DropDownListFor. Beaucoup de questions concernant la liaison d'un déroulant et en sélectionnant la valeur correcte, ce qui fonctionne très bien dans mon cas. Cependant, je ne suis pas clair sur ce qui est censé avoir sur l'action HttpPost dans mon contrôleur. Voici mon code:

Modèle

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

Afficher

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

Publié Action

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

Les listes déroulantes se peuplaient très bien, ils obtiennent pré-sélectionnés très bien. Mais sur le dos après form.Requests.AssignedTo est nulle. Je suppose que le véhicule Id est réaffecté quelque part, mais comment puis-je arriver à ce sans avoir recours en boucle à travers les cordes magiques de Request:

var id = Request["Requests[" + i + "].AssignedTo"];
Était-ce utile?

La solution

Voici une autre approche, que je ne pouvais pas des objets sous liés soit sans ModelBinder explicite:

définir une nouvelle classe pour votre réponse:

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

Sur la page modifier comme suit: (j'ai changé demande à 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))%>
    <%}%>

Sur votre bind contrôleur comme suit:

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

Je serais désireux de voir s'il y a une route plus directe, car cela m'a frappé aussi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top