【发布时间】:2016-05-16 14:22:21
【问题描述】:
我正在使用 .Net MVC5,并且我正在尝试使用编辑链接(或按钮)创建一个索引视图,该链接将发布(因此我不能使用 ActionLink)中显示的实体列表中的整个模型项实体风景。我该怎么做?
我的代码(到目前为止)在下面
@model IEnumerable<Projname.Models.MyEntity>
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th>Hello there</th>
<th>life is good</th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@using (Html.BeginForm("Edit", "Edit", FormMethod.Post))
{
@Html.Hidden(mytem => item);
<input type="submit" value="Edit" class="btn btn-default" />
}
</td>
<td>
@Html.ActionLink("Details", "Details", new { id = item.PrimeKey }) |
@Html.ActionLink("Delete", "Delete", new { id = item.PrimeKey })
</td>
</tr>
}
</table>
</body>
</html>
我假设有更好的方法来代替为实体的每个属性创建一个隐藏字段。
【问题讨论】:
-
只传递 myItem 的 ID/主键,并在将项目传递到编辑视图时从数据库中重新检索它。
-
为什么要传递整个模型,只有 ID 就可以了
-
@AWinkle 通常我会这样做,但由于我使用的是 Azure 表,因此仅在查询中指定行键(主键)会导致不希望的全表扫描 stackoverflow.com/questions/19715885/…。所以我尽量避免它。
-
@JOW 根据我的知识和下面的答案,我认为您将不得不将所有内容包装在一个隐藏字段中。由于这是在视图渲染过程中,您可以使用 JSON 序列化程序(例如 NewtonSoft)将对象序列化为单个隐藏字段。这将限制模型更改的风险并使编码更容易,尽管它的性能可能不如对每个字段使用 HiddenFor。
-
首先,您不能使用
foreach循环为集合生成表单控件(请参阅this answer。其次,查看您在@Html.Hidden(mytem => item);中生成的html 以了解为什么这永远无法工作(您需要为模型中的每个属性生成一个输入)。只需传递ID属性即可。
标签: c# .net asp.net-mvc asp.net-mvc-5