我有一个列表,返回布尔值设置为false的作业列表,在我看来,我希望将其更改为true。我的问题是视图没有传回ID,我看不出原因。
起初我使用了foreach,但经过一些研究后我发现我应该使用IList。
这是后端:
[HttpGet]
[Authorize(Roles = MyRoles.Admin)]
public ActionResult JobsToModerate()
{
var allJobs = db.Jobs.Where(x => x.isModerated == false).ToList();
return View(allJobs);
}
[HttpPost]
[Authorize(Roles = MyRoles.Admin)]
public ActionResult JobsToModerate([Bind(Include = "ID,isModerated")] Job job, EditJobViewModel editJob)
{
if (!ModelState.IsValid)
{
var jobs = db.Jobs.Find(editJob.ID);
if (jobs == null)
{
return HttpNotFound();
}
else
{
jobs.ID = editJob.ID;
jobs.isModerated = editJob.isModerated;
}
try
{
db.SaveChanges();
}
catch (Exception ex) { throw ex; }
}
return View();
}
我的观点:
@model IList<JobSite3.Models.Job>
@using (Html.BeginForm("JobsToModerate", "Jobs", FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
for (var i = 0; i < Model.Count; i++)
{
@Html.HiddenFor(model => model[i].ID)
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model[i].Name)
</th>
<th>
@Html.DisplayNameFor(model => model[i].isModerated)
</th>
<th></th>
</tr>
<tr>
<td>
@Html.DisplayFor(model => model[i].Name)
</td>
<td>
@Html.EditorFor(model => model[i].isModerated)
</td>
</tr>
</table>
<input type="submit" id="btnNew" value="Save" class="btn btn-default" />
}
}
我认为解决方案存在类似的问题,但我还没有找到它。
答案 0 :(得分:1)
视图中的模型为IList<Job>
,因此您的POST方法需要匹配。它必须是
public ActionResult JobsToModerate(List<Job> model)
{
....
但是,您的方法中的代码对于集合没有意义,并且不清楚您的EditJobViewModel
类是什么。我假设你想要遍历每个Job
并更新数据库