gpt4 book ai didi

c# - 具有损坏索引的对象的 Razor Pages 模型绑定(bind)列表

转载 作者:行者123 更新时间:2023-12-03 23:52:50 25 4
gpt4 key购买 nike

我基本上有一个表单,我在其中添加和删除项目并使用模型绑定(bind)将它们绑定(bind)到列表。这适用于修改字段和添加新项目,但是当我尝试删除它们时,我破坏了索引并且绑定(bind)的列表不包括所有项目。

我生成的标记看起来像这样:

<table>
<tbody>
<tr>
<input type="text" name="devices[0].id" value="8574" />
<input type="text" name="devices[0].type" value="Type1" />
</tr>
<tr>
<input type="text" name="devices[1].id" value="4385" />
<input type="text" name="devices[1].type" value="Type2" />
</tr>
<tr>
<input type="text" name="devices[2].id" value="9486" />
<input type="text" name="devices[2].type" value="Type1" />
</tr>
...
</tbody>
</table>

我的模型绑定(bind)是这样的:
public IActionResult OnPostSave(List<Device> devices){
// ... do something
}

现在我让用户操作表单数据,只需通过 javascript 从表中删除行,然后将更新后的表单发送到我的 OnPostSave() .现在,例如,当删除 ID 为“4385”的行时,该行之后的所有项目都不会被绑定(bind)。关于这个 post从 Scott Hanselman 这绝对是有道理的,但我想知道是否有解决这个问题的方法?最好在将表单发布到服务器之前不修改 js 中的表单。

提前致谢!

最佳答案

模型绑定(bind)器支持非顺序索引。您必须使用一个显式索引,它由一个名为 propertyname.Index 的隐藏字段表示。对于集合中的每个项目。我将使用您示例中的设备键值来说明,但索引值可以是任何东西,包括字符串、guid 等:

    <tr>
<input type="hidden" name="devices.Index" value="8574" />
<input type="text" name="devices[8574].id" value="8574" />
<input type="text" name="devices[8574].type" value="Type1" />
</tr>
<tr>
<input type="hidden" name="devices.Index" value="4385" />
<input type="text" name="devices[4385].id" value="4385" />
<input type="text" name="devices[4385].type" value="Type2" />
</tr>
<tr>
<input type="hidden" name="devices.Index" value="9486" />
<input type="text" name="devices[9486].id" value="9486" />
<input type="text" name="devices[9486].type" value="Type1" />
</tr>

您可以在此处阅读有关使用顺序和非顺序索引绑定(bind)到集合的更多信息: https://www.learnrazorpages.com/razor-pages/model-binding#binding-complex-collections

关于c# - 具有损坏索引的对象的 Razor Pages 模型绑定(bind)列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54926633/

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