ASP.NET Core 6 MVC:用于查看模型集合的HTML表



从ASP.NET Core 6 MVC开始,在我的情况下,我有一个视图,它在可编辑的表中列出了一个对象的几个属性,然后列出了其他对象的一些属性(用户可以编辑值(

视图模型具有子级的属性和IEnumerable

public class MyObjectViewModel
{
public String Id { get; set; }
public String Descr { get; set; }
public IEnumerable<ChildrenObject> Children { get; set; }
public MyObjectViewModel()
{
Children = Enumerable.Empty<ChildrenObject>();
}
public class ChildrenObject
{
public String? Id { get; set; }
public String? Name { get; set; }
}
}

全部以相同的形式:

@using (Html.BeginForm("Save", "Controller", FormMethod.Post))
{
<input type="submit" value="SAVE"/>
<br />
@Html.LabelFor(model => model.Id)
@Html.TextBoxFor(model => model.Id, new { @readonly = "readonly" })
<br />
@Html.LabelFor(model => model.Descr)
@Html.EditorFor(model => model.Descr)
<br />
<table>
<tbody>
<tr>
<th>Id</th>
<th>Name</th>
</tr>
@foreach (var child in Model.Children)
{
<tr>
<td>@child.Id</td>
<td><input class="ef-select" type="text" value="@child.Name"></td>    
</tr>
}
</tbody>
</table>
}

因此,当按下按钮时,数据会转储回模型,以在控制器中执行SAVE操作。

简单的字段都可以(我可以将控制器中的数据作为视图模型(,但不确定如何使用table/children属性来完成。。。

有什么简单的方法不需要使用JS串行化或从表中提取数据?

感谢

如果您想在表中传递ChildrenObject的id和名称,可以尝试为id添加隐藏输入,并为名称输入设置名称属性:

@{var count = 0; }
@foreach (var child in Model.Children)
{
<tr>
<td>
@child.Id
<input value="@child.Id" name="Children[@count].Id" />
</td>
<td><input class="ef-select" type="text" value="@child.Name" name="Children[@count].Name"></td>
</tr>
count++;
}

最新更新