1

我更改了索引视图,以便每一行都包含在一个表单中:

索引.cshtml

@model IEnumerable<LevEl.Models.Page>

@foreach (var item in Model)
{
  using (Html.BeginForm("Edit", "Pages", item, FormMethod.Post, new { id = "itemForm_" + item.PageId }))
  { 
  <tr>
    <td>
      @Html.DisplayFor(modelItem => item.Title)
    </td>
    ...
    ... more fields
    ...
    <td>
      @Html.CheckBoxFor(modelItem => item.IsPublished, new { onClick = "$(itemForm_" + item.PageId + ").submit();" })
    </td>
    <td>
      @Html.ActionLink("Edit", "Edit", new { id = item.PageId }) | @Html.ActionLink("Details", "Details", new { id = item.PageId }) | @Html.ActionLink("Delete", "Delete", new { id = item.PageId })
    </td>
  </tr>
  }
}

这是我的控制器:

PagesController.cs

public ActionResult Index()
{
  return View(db.Pages.Include(p => p.Language).ToList());
}

[HttpPost]
public ActionResult Edit(Page page)
{
  var method = Request.HttpMethod;

  if (ModelState.IsValid)
  {
    if (page.PageContents.GroupBy(pc => pc.Language).Any(g => g.Count() > 1))
      return HttpNotFound("A page cannot have two translations in the same language.");

    db.Entry(page).State = EntityState.Modified;
    db.SaveChanges();
    ClearMenuKeys();
    return RedirectToAction("Index");
  }
  return View(page);
}

当我切换复选框中的值并到达控制器时,page为空。如何page在回发时传递整个对象?

4

1 回答 1

2

在我看来,您的 HTML 不存储页面的值。@Html.DisplayFor也只显示您必须@Html.HiddenFor为该字段设置的数据。

编辑:

@Html.DisplayFor(modelItem => item.Title)
@Html.HiddenFor(modelItem => item.Title)
于 2012-11-18T10:19:36.997 回答