Инкрементная последовательность DropDownListFor Binding? - PullRequest
0 голосов
/ 30 марта 2010

Я использую пошаговое упорядочение для коллекции объектов в форме. Все работает хорошо и прекрасно, кроме случаев, когда мне нужно использовать DropDownListFor. Множество вопросов, касающихся привязки выпадающего списка и выбора правильного значения, которое в моем случае работает нормально. Однако мне неясно, что должно быть на действии HttpPost в моем контроллере. Вот мой код:

Модель

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

View

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

Добавлено действие

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

Раскрывающиеся списки заполняются очень хорошо, они предварительно выбираются просто отлично. Но при обратной отправке формы. Запросы. Назначено, имеет значение null. Я предполагаю, что Идентификатор машины где-то публикуется, но как мне добраться до этого, не прибегая к циклическому изменению магических строк Request:

var id = Request["Requests[" + i + "].AssignedTo"];

1 Ответ

1 голос
/ 31 марта 2010

Вот альтернативный подход, так как я не мог связать подобъекты без явного связывателя модели:

определите новый класс для вашего ответа:

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

На странице измените его следующим образом: (я изменил запрос на 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))%>
    <%}%>

На вашем контроллере свяжите следующим образом:

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

Я бы хотел посмотреть, есть ли более прямой маршрут, так как это меня тоже мучает.

...