带有for循环的MVC视图仅返回最后一项

Posted

技术标签:

【中文标题】带有for循环的MVC视图仅返回最后一项【英文标题】:MVC View with foor loop only returning last item 【发布时间】:2017-12-19 14:14:59 【问题描述】:

我有一个生成其他部分视图列表的部分视图,当我提交给控制器时,我只从最后添加的项目中获取我想要的数据。我明明做了什么傻事,却看不出是什么。

    @for (int i = 0; i < Model.Listofthings.Count(); i++)
    
        <ul>
            <li>
                @html.RenderPartial("Thing", Model.Listofthings[i]);
            </li>
        </ul>

在 Thing partial 我们有:

@model FancyObject
<script>
    $(function () 
        $('a#selectUser').click(function () 
            $('form#selectUserForm').submit();
        );
    );

< link rel="stylesheet" href="~/Content/Site.css" />
< form id="selectUserForm" method="post" action="@Url.Action("SelectUser", "Home")">

@Html.HiddenFor(x => x.SomethingImportant)
            <a href="#" id="selectUser" class="HyperLink1">
                <i class="fa fa-female"></i>
                <span class="nav-text">
                    @Model.AProperty
                </span>
            </a>

现在当我提交表单时,我只从上面创建的最后一个项目中获得“SomethingImportant”。我做错了什么?

【问题讨论】:

我将 和 标记设置为 @for 循环。现在,您没有列表,而是有多个列表,每个列表只有一个元素。 您的代码存在多个问题。第一个脚本永远不应该是部分的。接下来,您生成重复的 id 属性,这是无效的 html,意味着您的脚本永远无法正常工作。不管你的要求是什么,你只会提交第一个表格,而不是最后一个。很难理解您在这里尝试做什么(以及为什么),尤其是当您不显示控制器方法时。 问题是重复的 id 标签。我想要做的是有一个可以单击的对象列表,然后获取有关这些对象的信息,这些信息显示在不同的页面上。局部视图是一个侧边栏菜单,单击名称后,您会看到有关您单击的任何内容的信息。脚本从不在局部视图中,它们要么在共享布局中,要么在呈现局部视图的主页中,只是脚本可见:) 【参考方案1】:

您将获得最后一项,因为您的 Thing 部分视图中的隐藏字段在每次 foreach 迭代时都具有相同的名称。

    您可以通过将参数声明为list 或任何集合来获取控制器操作中所有隐藏值的集合。 public ActionResult GetMyValues(List&lt;string&gt; SomethingImportant) 或者您可以区分每个iteration 上的隐藏字段名称,并在您的控制器中分别获取它们。

【讨论】:

以上是关于带有for循环的MVC视图仅返回最后一项的主要内容,如果未能解决你的问题,请参考以下文章

带有 for 循环的日期数组

Python“for in”循环打印列表中的最后一项

如何在Django视图中使用for循环返回每次迭代[关闭]

ASP MVC 2 问题 - 尝试在视图中的 for 循环中显示图像

ArrayList循环仅输出最后一项[重复]

For循环遍历数组仅显示最后一个值