これは実際には非常に単純な状況ですが、私はこの作業をどうやって行うのか分かりません。したがって、PartialViewにレンダリングされたチェックボックスのリストがあります。親からのデータがViewModelから子のViewModel PartialViewに渡されました。これらはフォームで包まれていますが、残念ながら私はPartialViewからデータを取得できません。
親のViewModel:
どのようにPartialViewからコントローラにアイテムのリストを投稿しますか?
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
}
子供のViewModel:
public class DaysViewModel
{
public int Id { get; set; }
public string DayName { get; set; }
}
親ビュー:
@Html.Partial("Days", Model.Days)
PartialView(ここでは、我々はそれをバインドするには '日' 属性名を使用しています親モデル)
@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>
コントローラー:
[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");
}
「Days」はcomです複雑なオブジェクトにチェックボックスをバインドすることはできません。また、foreachループを使ってコレクションのフォームコントロールを生成することもできません。ビューモデルと[this answer]に似た 'for'ループが必要です(http://stackoverflow.com/questions/29542107/pass-list-of-checkboxes-into-view-and-pull-out-ienumerable/ 29554416#29554416) –
みんな、アイデアをありがとう、私はいくつかのソリューションを試してみましょう。 –