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" />
}