Выпадающий список инкрементной последовательности для привязки?
-
23-09-2019 - |
Вопрос
Я использую инкрементное упорядочивание для коллекции объектов в определенной форме.Все работает отлично, за исключением случаев, когда мне нужно использовать 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....
}
Мне бы очень хотелось посмотреть, есть ли более прямой путь, так как это тоже мучило меня.