我有一个表单(除其他外)包含2个多选列表框。基本上,您可以使用一些添加/删除按钮从左侧项目的完整列表中向右侧添加项目。
问题是,在发回控制器时,我看不到拾取列表框内容的方法。
我遵循了这个例子: http://ittecture.wordpress.com/2009/04/30/tip-of-the-day-198-asp-net-mvc-listbox-controls/
如果您在发布前实际选择了列表框中的项目,则此工作正常。这不是我认为这个UI应该表现的方式。
希望有道理, 尼克
答案 0 :(得分:1)
感谢帮助人员。我忘了提到我用jQuery填充选定的项目列表框。但不确定这是否重要。
最后,我通过在发布之前用jQuery选择所有项目来修复它。看起来像最简单的解决方案。
答案 1 :(得分:0)
除了列表框之外,还有几个隐藏的输入字段来保存“当前添加的”项目。列表框选择将在选中时指示“要删除的项目”。
好的,澄清。你有左右列表框。左边一个保存可用的项目,选定的项目被POST,然后添加。右边一个包含当前添加的项目,选定的项目将被POST,然后从已添加的项目中删除。
现在,您还需要保留当前添加的项目。你可以通过一堆
来做到这一点<input type="hidden" name="currently_added" value="itemid" />
隐藏的字段。
是的,你可以去jQuery,但这是一个简单的方法;并非每个网站都应该设计为需要启用JavaScript。上述解决方案无需启用JavaScript即可运行。
您从页面发布的帖子将为您提供3个阵列:
你拿(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添加两个字段),这将是字符串数组。这将设置为已添加的隐藏字段中的所有值以及已删除的所有值。