Выпадающий список инкрементной последовательности для привязки?

StackOverflow https://stackoverflow.com/questions/2547260

Вопрос

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

Модель

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

Опубликованное действие

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

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

var id = Request["Requests[" + i + "].AssignedTo"];
Это было полезно?

Решение

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

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

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....
}

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top