gpt4 book ai didi

c# - 使用数组属性绑定(bind)模型以在 ASP.NET Core MVC 中形成

转载 作者:行者123 更新时间:2023-11-30 17:28:32 25 4
gpt4 key购买 nike

我正在尝试弄清楚如何将表单元素绑定(bind)到包含数组或可枚举属性的模型。此表单应该可用于添加新对象或编辑现有对象。

下面是一个精简的例子。

如果 Levels 不包含任何元素(例如 create),则不会呈现 Level 字段的行。您应该向 Level 数组添加一个空元素还是应该添加一行空字段?但是如何使用 asp-for 属性来做到这一点。

如果级别包含元素(例如编辑),则渲染级别字段的行。但是,在 Edit 方法中发布 model.Levels 时为 null

关于如何最好地实现它有什么想法吗?

要绑定(bind)的模型

public class CarparkModel
{
[HiddenInput]
public int Id { get; set; }
public string Name { get; set; }
public Level[] Levels { get; set; }
}

public class Level
{
[HiddenInput]
public int Id { get; set; }
public string Description { get; set; }
public int NrOfSpaces { get; set; }
}

主视图

@model CarparkModel

<form method="POST">
<input asp-for="Id">
<div>
<label asp-for="Name"></label>
<input asp-for="Name">
</div>
<table>
<tr>
<th>Description</th>
<th>Nr of spaces</th>
</tr>
@foreach (Level level in Model.Levels)
{
<tr>
<td><input asp-for="Description"></td>
<td><input asp-for="NrOfSpaces"></td>
</tr>
}
<tr>
<td colspan="2>
<!-- Click = new row of Level fields added -->
<button type="button">Add level</button>
</td>
</tr>
</table>
<button type="submit">Save</button>
</form>

Controller

public class CarparkController
{
[HttpGet]
public IActionResult Create()
{
return View(new CarparkModel());
}

[HttpPost]
public IActionResult Create(CarparkModel model)
{
if (ModelState.IsValid)
{
_repository.Save(model);
return RedirectToAction("index");
}

return View(model);
}

[HttpGet]
public IActionResult Edit(int id)
{
return View(_repository.Get(id));
}

[HttpPost]
public IActionResult Edit(CarparkModel model)
{
if (ModelState.IsValid)
{
_repository.Save(model);
return RedirectToAction("index");
}

return View(model);
}
}

最佳答案

如果您希望能够将表单中的项目发回,请不要使用 foreach。使用 for 循环和项目的索引命名。

@model CarparkModel

<form method="POST">
<input asp-for="Id">
<div>
<label asp-for="Name"></label>
<input asp-for="Name">
</div>
<table>
<tr>
<th>Description</th>
<th>Nr of spaces</th>
</tr>
@for(var index = 0, index < Model.Levels.Length, index++)
{
<tr>
<td><input asp-for="@Model.Levels[index].Description"></td>
<td><input asp-for="@Model.Levels[index].NrOfSpaces"></td>
</tr>
}
<tr>
<td colspan="2">
<!-- Click = new row of Level fields added -->
<button type="button">Add level</button>
</td>
</tr>
</table>
<button type="submit">Save</button>
</form>

在表单中发布时需要索引来重建集合。

关于c# - 使用数组属性绑定(bind)模型以在 ASP.NET Core MVC 中形成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52668159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com