Я немного сбит с толку, потому что я думал, что это очень прямолинейная вещь, возможно, это что-то простое сбивает меня с толку.
У меня есть вид:
@model IEnumerable<CarViewModel>
@using (Html.BeginForm("SummarySaveAll", "VroomVroom", FormMethod.Post))
{
@Html.AntiForgeryToken()
<div>
<table>
<thead>
<tr>
<th width="1">
@Html.DisplayNameFor(model => model.Driver)
</th>
<th width="1">
@Html.DisplayNameFor(model => model.Colour.Name)
</th>
</tr>
</thead>
<tbody>
@foreach (var element in Model)
{
<tr>
<td width="1">
@Html.DisplayFor(m => element.Driver)
</td>
<td width="1">
@Html.DropDownListFor(m => element.Colour, element.Colours, "Unknown")
</td>
</tr>
}
</tbody>
</table>
<div>
<input type="submit" value="Save Changes" class="btn" />
@Html.ActionLink("Cancel Changes", "Index", null, new { @class = "btn" })
</div>
</div>
}
и list / enumerable из CarViewModel
должен возвращаться к контроллеру VroomVroom
, действие SummarySaveAll
, которое он выполняет, но модель просмотра на странице не передается обратно:
[HttpPost]
public ActionResult SummarySaveAll(IEnumerable<CarViewModel> summaries)
{
// Want to do stuff with summaries but it's always null
return View();
}
Я пытался инкапсулировать Список в другой ViewModel и циклически проходить по элементам, используя for i
l oop, но это также не вернулось бы к контроллеру.
Конечно, можно отправить Список или IEnumerable моделей обратно в контроллер?
My CarVM:
public class CarViewModel
{
[MaxLength(150)]
[Display(AutoGenerateField = true, Name = "Entered By")]
public string Driver { get; set; }
[Display(AutoGenerateField = true)]
public Colour Colour { get; set; }
[Key]
[Display(AutoGenerateField = false)]
public int Id { get; set; }
[Display(AutoGenerateField = false)]
public bool IsDeleted { get; set; } = false;
public IEnumerable<SelectListItem> Colours { get; set; }
public CarViewModel() { }
public CarViewModel(Model CarModel summaryModel, CarPropertyCollection propertyCollection)
{
Driver = summaryModel.Driver;
Id = summaryModel.Id;
IsDeleted = summaryModel.IsDeleted;
Colour = summaryModel.Colour == null ? null :
propertyCollection.Colours.Where(x => x.Id == summaryModel.Colour.Id).FirstOrDefault();
Colours = propertyCollection.Colours.Select(x => new SelectListItem { Value = x.Id.ToString(), Text = x.Name });
}
}
}
Необходимо подчеркнуть, что Colour
является пользовательским классом, но только имеет свойства Id и Name