Razor MVC视图不绑定for循环if中的输入if循环包含if语句以控制输入呈现

Razor MVC视图不绑定for循环if中的输入if循环包含if语句以控制输入呈现,razor,asp.net-core-mvc,Razor,Asp.net Core Mvc,我有一个视图,它根据类型为List的视图模型属性的长度创建许多输入框 我使用带有索引的for循环将输入绑定到列表。这很好,用户输入的值被传递给POST方法ok。以下代码工作正常(例如,3个输入值分别为1、2和3,然后MyList=[1,2,3]): 为了简洁起见,代码已精简到最低限度 你知道为什么这个if语句会扼杀绑定,或者如何绕过它吗?谢谢你的阅读 编辑:我尝试在循环之前和之外渲染第一个输入,然后在索引为1时启动循环,但同样的问题也发生了 更新:我可以通过使用jQuery轻松地将禁用状态设置为

我有一个视图,它根据类型为
List
的视图模型属性的长度创建许多输入框

我使用带有索引的for循环将输入绑定到列表。这很好,用户输入的值被传递给POST方法ok。以下代码工作正常(例如,3个输入值分别为1、2和3,然后
MyList=[1,2,3]
):

为了简洁起见,代码已精简到最低限度

你知道为什么这个if语句会扼杀绑定,或者如何绕过它吗?谢谢你的阅读

编辑:我尝试在循环之前和之外渲染第一个输入,然后在索引为1时启动循环,但同样的问题也发生了


更新:我可以通过使用jQuery轻松地将禁用状态设置为true,但这也会杀死属性。因此,任何禁用的绑定输入都将清除MyList。

默认ModelBinder要求集合索引器从零开始并连续(除非为集合索引器添加输入)

禁用的控件不提交值,因此当禁用第一个输入时,第一个项的索引器为
1
,而不是
0
,因此模型绑定失败

解决这个问题的一个简单方法是将输入设置为只读

<input asp-for="MyList[i]" type="text" readonly="readonly"> 

另一个选项是包含集合索引器的隐藏输入,它允许在索引器不是基于零且连续的情况下绑定集合

@for (var i = 0; i < Model.MyList.Count; i++)
      if (i == 0)
      {
          <input asp-for="MyList[i]" type="text" disabled="disabled">
      }
      else
      {
          <input asp-for="MyList[i]" type="text">
      }
      <input type="hidden" name="MyList.Index" value="@i" />
}
for(var i=0;i
但请注意,在这种情况下,集合将缺少第一项(因为禁用输入的值将不会提交)。

解决方案和解释我的代码为什么不起作用。太好了,非常感谢:o)
<input asp-for="MyList[i]" type="text" readonly="readonly"> 
@for (var i = 0; i < Model.MyList.Count; i++)
      if (i == 0)
      {
          <input asp-for="MyList[i]" type="text" disabled="disabled">
      }
      else
      {
          <input asp-for="MyList[i]" type="text">
      }
      <input type="hidden" name="MyList.Index" value="@i" />
}