带有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<string> SomethingImportant)
或者您可以区分每个iteration
上的隐藏字段名称,并在您的控制器中分别获取它们。
【讨论】:
以上是关于带有for循环的MVC视图仅返回最后一项的主要内容,如果未能解决你的问题,请参考以下文章