【发布时间】:2019-03-29 10:34:38
【问题描述】:
在表单上的输入上使用“禁用”属性不会发布它们,这是预期和想要的。但是,如果您在列表中准备 3 个对象的表单,禁用第一个和第三个,然后提交,则第二个对象出现在 post header 中,但没有正确绑定到列表,因为它有一个索引 [1] 而不是[0]。
我了解模型绑定的工作原理以及它为什么不绑定我想要的已发布对象,但我不知道如何描述该问题以获得能够引导我找到解决方案的具体结果。我搜索的任何内容都会指向基本的帖子和绑定示例。
在我正在使用的模型中列出:
public IList<_Result> Results { get; set; }
类 _Result 具有以下属性之一:
public string Value { get; set; }
我填写列表并在视图中使用它,如下所示:
@for (int i = 0; i < Model.Results.Count; i++)
{
...
<td>
<input asp-for="Results[i].Value" disabled />
</td>
...
}
我在表单上有复选框,它(使用 javascript)从输入中删除“禁用”属性,从而允许发布它们。
当我用 3 个 _Result 对象填充上述列表时,它们会显示在表单上并且都具有“禁用”属性。如果我从前两个对象中删除“禁用”属性并单击提交按钮,我会收到包含前 2 个 _Result 对象的结果列表,这是预期的。
但是,如果我仅从第二个 _Result 对象中删除“禁用”属性(第一个 _Result 对象仍然具有“禁用”属性),则结果列表在我的 Controller 方法中返回为空。 在我的表单数据页眉中,我看到:“Results[1].Value: Value that I want posted”,这意味着 post 发生了,但由于索引,list 没有绑定对象。
知道如何实现正确的绑定吗?另外,我使用“禁用”属性的原因是因为我在一个页面上显示了许多结果,并且只想发布那些被选中的结果。
【问题讨论】:
标签: view asp.net-core-mvc model-binding