从复选框列表中更改布尔值

时间:2017-07-21 10:37:53

标签: asp.net-mvc

我有一个列表,返回布尔值设置为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" />
    }
}

我认为解决方案存在类似的问题,但我还没有找到它。

1 个答案:

答案 0 :(得分:1)

视图中的模型为IList<Job>,因此您的POST方法需要匹配。它必须是

public ActionResult JobsToModerate(List<Job> model)
{
    ....

但是,您的方法中的代码对于集合没有意义,并且不清楚您的EditJobViewModel类是什么。我假设你想要遍历每个Job并更新数据库