【发布时间】:2020-04-16 14:50:02
【问题描述】:
这是我的看法
@model MyProject.ViewModel.CourseViewModel
@{
ViewData["Title"] = "AddCourseView";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h1>Add Course</h1>
<div class="row">
<div class="col-md-12">
<form method="post">
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<label asp-for="Course.CourseName"></label>
<input asp-for="Course.CourseName" class="form-control" />
<span asp-validation-for="Course.CourseName" class="text-danger"></span>
</div>
<label>Select lecturers to the course</label>
@{
var lst = Model.List;
@for (int i = 0; i<lst.Count(); i++)
{
var lecturer = lst.ElementAt(i);
<div class="checkbox">
<label><input type="checkbox" value="" id="checkbox @i" asp-for=@lecturer.IsChecked>@lecturer.LecturerId</label>
</div>
}
@if (lst.Count() == 0)
{
<div class="checkbox">
<span class="badge badge-danger" style="font-size:medium">Lecturers list is empty</span>
</div>
}
}
<p></p>
<button type="submit" class="btn btn-primary">Create</button>
</form>
</div>
</div>
视图调用 AddCourse
这是我的控制器:
[HttpGet]
public IActionResult AddCourse()
{
var lst = userService.GetAllLecturers();
CourseViewModel courseViewModel = new CourseViewModel();
courseViewModel.List = new List<IsCheckedLecturer>();
foreach(var lecture in lst)
{
courseViewModel.List.Add(new IsCheckedLecturer
{
IsChecked = false,
LecturerId = lecture.UserId
});
}
return View(courseViewModel);
}
[HttpPost]
public IActionResult AddCourse(CourseViewModel viewModel)
{
return View(viewModel);
}
HttpGet 工作正常,但是 HttpPost 方法(第二种方法)得到一个空列表而不是从视图中获取模型(通过模型绑定)
这是课程视图模型
public class CourseViewModel
{
public Course Course { get; set; }
public IList<IsCheckedLecturer> List { get; set; }
}
public class IsCheckedLecturer
{
public bool IsChecked { get; set; }
public string LecturerId { get; set; }
}
为什么模型绑定不起作用?以及我如何解决它? 也许是因为它的复杂视图模型?
【问题讨论】:
标签: c# asp.net asp.net-mvc asp.net-core