Pregunta

Estoy utilizando incrementales para secuenciación una colección de objetos en una forma. Todo funciona bien y dandy, excepto cuando tengo que usar DropDownListFor. Un montón de preguntas relativos a la unión de un desplegable y seleccionando el valor correcto, que está trabajando muy bien en mi caso. Sin embargo, estoy claro en lo que se supone que tienen en la acción HttpPost en mi controlador. Aquí está mi código:

Modelo

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

Ver

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

Publicado Acción

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

Las listas desplegables son rellenados bien, consiguen preseleccionados bien. Pero en la parte posterior de post form.Requests.AssignedTo es nulo. Asumo la identificación del vehículo está siendo enviado de vuelta en alguna parte, pero ¿cómo puedo llegar a ese sin recurrir bucle a través de las cuerdas mágicas Request:

var id = Request["Requests[" + i + "].AssignedTo"];
¿Fue útil?

Solución

Este es un enfoque alternativo, ya que no podía conseguir sub objetos vinculados ya sea sin un modelbinder explícito:

definir una nueva clase por su respuesta:

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

En el cambio de página como sigue: (he cambiado a petición 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))%>
    <%}%>

En su aprieto controlador de la siguiente manera:

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

Yo estaría dispuesto a ver si hay una ruta más directa, ya que esto me ha plagado también.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top