我的问题是如何从视图中将表数据传回控制器?
我在模特中上课:
public class Company
{
public string Name { get; set; }
public int ID { get; set; }
public string Address { get; set; }
public string Town { get; set; }
}
我将公司列表传递给我的观点:
@model IEnumerable<MyTestApp.Web.Models.Company>
....
@using (Html.BeginForm("Edit", "Shop"))
{
<table id="example">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.Address)
</th>
<th>
@Html.DisplayNameFor(model => model.Town)
</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model) {
<tr>
<td>
@Html.EditorFor(modelItem => item.Name)
</td>
<td>
@Html.EditorFor(modelItem => item.Address)
</td>
<td>
@Html.EditorFor(modelItem => item.Town)
</td>
</tr>
}
</tbody>
</table>
<input type="submit" value="Submit" />
}
一切看起来都不错,但我无法理解如何在控制器中获取修改后的数据?我使用了这些方法:
public ActionResult Edit(IEnumerable<Company> companies)
{
// but companies is null
// and ViewData.Model also is null
return RedirectToAction("SampleList");
}
我需要访问修改过的对象,我做错了什么?
更新:感谢 webdeveloper ,我只需要使用'for'循环而不是'foreach'循环。正确的版本是
<tbody>
@for (int i = 0; i < Model.Count(); i++ ) {
<tr>
<td>
@Html.EditorFor(modelItem => modelItem[i].Name)
</td>
<td>
@Html.EditorFor(modelItem => modelItem[i].Address)
</td>
<td>
@Html.EditorFor(modelItem => modelItem[i].Town)
</td>
</tr>
}
</tbody>
答案 0 :(得分:2)
请在这里查看我的答案:Updating multiple items within same view或 Darin Dimitrov 回答。
在呈现的html标记中,您需要index
属性中name
的项目。您还可以查看:Model Binding To A List
答案 1 :(得分:1)
我认为您错过了表单中的Company
ID,以便正确绑定模型。
您应该像这样添加:
@using (Html.BeginForm("Edit", "Shop"))
{
<table id="example">
<thead>
<tr>
<th>
@Html.HiddenFor(model => model.ID)
@Html.DisplayNameFor(model => model.Name)
</th>
...
否则你的其余代码似乎没问题。
答案 2 :(得分:0)
您需要通过为每个正在编辑的对象提供一个ID来绑定表行,以便mvc可以将其绑定回控制器。一行表格数据示例:
@for (var a = 0; a < @Model.Pets.Count; a++)
{
<tr>
<td>
@Html.CheckBoxFor(model => @Model.Pets[a].ChildSelected, new { @id= a + "childSelected" })
</td>
</tr>