Das ist eigentlich eine ganz einfache Situation, aber ich kann nicht verstehen, wie das funktioniert. Also, es gibt eine Liste von Checkboxen, gerendert in PartialView. Daten vom übergeordneten Element übergeben ViewModel an Kind ViewModel in PartialView. All diese eingewickelten Formulare, leider kann ich die Daten nicht von PartialView bekommen.
Eltern Ansichtsmodell:
Wie wird die Liste der Elemente von PartialView auf den Controller übertragen?
public class UserProgramsViewModel
{
public int Id { get; set; }
[Required(ErrorMessage = "Введите название")]
[DisplayName("Название")]
public string ProgramName { get; set; }
[DisplayName("Пользователь")]
public string UserName { get; set; }
[DisplayName("Пользователь")]
public int UserId { get; set; }
[DisplayName("Дни Программы")]
public ICollection<ProgramDaysDTO> ProgramDays { get; set; }
public IEnumerable<DaysViewModel> Days { get; set;} //Passed to Partial
}
Kind Ansichtsmodell:
public class DaysViewModel
{
public int Id { get; set; }
public string DayName { get; set; }
}
geordneten Ansicht:
@Html.Partial("Days", Model.Days)
PartialView (hier sind wir mit Attributnamen 'Days' es zu binden Elternmodell)
@model IEnumerable<BBN.Admin.ViewModels.DaysViewModel>
<ul class="list-group col-lg-2">
@foreach (var item in Model)
{
<li class="list-group-item"><input type="checkbox" name="Days" value="@item.Id" /> @item.DayName</li>
}
</ul>
Controller:
[HttpPost]
[RBAC]
public async Task<ActionResult> Create(UserProgramsViewModel model)
{
var groups = await _us.GetAll();
ViewBag.Users = groups.Select(x => new SelectListItem
{
Text = x.Login,
Value = x.Id.ToString()
});
var dto = new UserProgramsDTO
{
ProgramName = model.ProgramName,
UserId = model.UserId,
Days = model.Days
};
var result = await _ps.Create(dto);
if (result.IsSuccess == (BLL.Utilities.Enums.IsSuccess)Enums.IsSuccess.Success) return RedirectToAction("Index");
else return View("Create");
}
'Tage' ist ein com Plex-Objekt und Sie können ein Kontrollkästchen nicht an ein komplexes Objekt binden. Sie können auch keine foreach-Schleife verwenden, um Formularsteuerelemente für eine Sammlung zu generieren. Sie benötigen ein View-Modell und eine 'for'-Schleife, die der [dieser Antwort] ähnelt (http://stackoverflow.com/questions/29542107/pass-list-of-checkboxes-into-view-and-pull-out-ienumerable/ 29554416 # 29554416) –
Jungs, danke für Ideen, lass mich einige Lösungen ausprobieren. –