如何从列表框中获取未在ASP.NET MVC中选择的所有值

时间:2010-04-21 16:06:20

标签: asp.net-mvc post listbox

我有一个表单(除其他外)包含2个多选列表框。基本上,您可以使用一些添加/删除按钮从左侧项目的完整列表中向右侧添加项目。

问题是,在发回控制器时,我看不到拾取列表框内容的方法。

我遵循了这个例子: http://ittecture.wordpress.com/2009/04/30/tip-of-the-day-198-asp-net-mvc-listbox-controls/

如果您在发布前实际选择了列表框中的项目,则此工作正常。这不是我认为这个UI应该表现的方式。

希望有道理, 尼克

3 个答案:

答案 0 :(得分:1)

感谢帮助人员。我忘了提到我用jQuery填充选定的项目列表框。但不确定这是否重要。

最后,我通过在发布之前用jQuery选择所有项目来修复它。看起来像最简单的解决方案。

答案 1 :(得分:0)

除了列表框之外,还有几个隐藏的输入字段来保存“当前添加的”项目。列表框选择将在选中时指示“要删除的项目”。

好的,澄清。你有左右列表框。左边一个保存可用的项目,选定的项目被POST,然后添加。右边一个包含当前添加的项目,选定的项目将被POST,然后从已添加的项目中删除

现在,您还需要保留当前添加的项目。你可以通过一堆

来做到这一点
<input type="hidden" name="currently_added" value="itemid" />

隐藏的字段。

是的,你可以去jQuery,但这是一个简单的方法;并非每个网站都应该设计为需要启用JavaScript。上述解决方案无需启用JavaScript即可运行。

您从页面发布的帖子将为您提供3个阵列:

  1. 左侧框选择要添加的项目
  2. 右侧框选择要删除的项目
  3. 隐藏字段 - 已添加项目
  4. 你拿(3),从中删除(2),添加(1),然后显示相同的页面或做任何你想做的事。

答案 2 :(得分:0)

我认为列表框不是你想要的右边控件的控件。列表框的工作方式(通过发布所选项目)并不是您想要实现的目标。

您可以考虑使用网格,甚至只考虑具有多个字符串的div。有更多的Javascript / JQuery要编写,但它将提供良好的用户体验,因为在完成所有工作之前不需要回发。

您需要使用JavaScript / JQuery根据要添加和删除的按钮添加和删除div中的项目。

此外,对于右侧添加的每个项目,您需要添加隐藏的输入字段:

<input type="hidden" id="SelectedItems" value="..." />

将值设置为新添加项的键或ID。如果从右侧控件中删除字段,请确保删除关联的隐藏字段。

要处理用户已删除的右侧项目,您需要隐藏字段以指明哪些项目已被删除:

<input type="hidden" id="RemovedItems" value="..." />

然后在您的控制器中,您可以向Action添加两个参数(或向viewmodel添加两个字段),这将是字符串数组。这将设置为已添加的隐藏字段中的所有值以及已删除的所有值。