【发布时间】:2016-05-05 05:20:05
【问题描述】:
这实际上是很简单的情况,但我不知道如何使它工作。因此,PartialView 中呈现了复选框列表。数据从父 ViewModel 传递到 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
}
子视图模型:
public class DaysViewModel
{
public int Id { get; set; }
public string DayName { get; set; }
}
父视图:
@Html.Partial("Days", Model.Days)
PartialView(这里我们使用属性名称“Days”将其绑定到父模型)
@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是一个复杂对象,您不能将复选框绑定到复杂对象。也不能使用foreach循环为集合生成表单控件。您需要一个视图模型和一个类似于this answer 的for循环 -
伙计们,感谢您的想法,让我尝试一些解决方案。
标签: c# asp.net-mvc