首页 > 解决方案 > MVC Razor For 循环绑定到 ViewModel 问题

问题描述

我看到我的视图模型发回我的控制器时出现了一个令人困惑的问题,我对它为什么不起作用感到困惑。尽管我知道为什么它可能无法正常工作,但我在底部附近进行了解释。

基本上,我使用 for 循环将我的模型绑定到剃刀视图中的 HTML

           @for (int i = 0; i < Model.CheckBoxTag.Count; i++)
            {
                @if (Model.CheckBoxTag[i].TagTypeName == "test")
                {
                    ....
                }
            }

当我提交表单时,测试 CheckBoxTag 对象会按预期发送到我的控制器。

但是,当我仅使用升级标签在 html 页面下方执行相同操作时:-

            @for (int i = 0; i < Model.CheckBoxTag.Count; i++)
            {
                @if (Model.CheckBoxTag[i].TagTypeName == "test1")
                {
                        ...
                }

            }

test1 CheckBoxTag 对象不会发送回控制器。(计数仍然是 3,而应该是 6)

事实上它是相同的代码我不确定如何解决它。

我的理论:我相信它不会发回我的控制器,因为循环测试是集合中的第一个元素,因此它总是进入 IF。而 test1 对象靠近集合的底部,因此 IF 在循环中被跳过了好几次。

那是对的吗?如果不是,可能是什么问题?

谢谢

标签: c#asp.net-mvcrazorasp.net-core-mvcviewmodel

解决方案


如评论部分所述,索引器必须是连续的。

因此在我放的 for 循环中

     @for (int i = 0; i < Model.CheckBoxTag.Count; i++)
        {


            @if (Model.CheckBoxTag[i].TagTypeName == "test1")
            {
                // New!
                <input type="hidden" name="CheckBoxTag.Index" value="@i" />
                    ...
            }

        }

所以现在索引器“[i]”现在在每个循环中都增加


推荐阅读