【发布时间】:2017-07-15 02:25:31
【问题描述】:
我将对象列表传递给视图并允许用户更新单个对象的属性。
这是获取操作。我在这里将文章列表传递给视图。
public ActionResult EditArticleList(int id)
{
ArticleList articleList = unitOfWork.ArticleListRepository.GetById(id);
IEnumerable<Article> Articles = articleList.Articles;
return View(Articles);
}
这是视图。
@model IEnumerable<Domain.Entities.Article>
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>EditArticleList</title>
</head>
<body>
@for (int i = 0; i < Model.Count(); i++)
{
using (Html.BeginForm("EditArticleList", "AdminArticleList", FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.EditorFor(model => Model.ToList()[i].Title, null, "Title")
@Html.HiddenFor(model => Model.ToList()[i].Id)
<input type="submit" />
<br />
}
}
这是发布操作。
public ActionResult EditArticleList(Article art)
{
}
我正在传递 3 篇 ID 为 1、2、3 的文章。 但是无论我更新和发布哪个文章,id都返回为1。 标题返回正确。
【问题讨论】:
-
这真的没有意义。您一次只能提交一个表单,那么为什么要创建多个表单。以及您生成的与您的模型无关的
name属性。 -
@StephenMuecke 我允许用户从项目列表中一次更新一个项目。每个项目都有一个更新按钮。这就是我为每个项目创建一个表单的原因。
-
这是错误的方法,并且是一个糟糕的 UI(如果用户在 2 个文本框中输入值并点击提交按钮,认为两者都会被保存。你将无法返回视图如果
ModelState无效 -
要么有一个带有“编辑”链接的只读“索引”视图,要么有一个带有
for循环的表单,以便用户可以在一个操作中编辑它们
标签: asp.net asp.net-mvc asp.net-mvc-4 razor