【问题标题】:How do I get all values from a listbox that are not selected in ASP.NET MVC如何从 ASP.NET MVC 中未选择的列表框中获取所有值
【发布时间】:2010-04-21 16:06:20
【问题描述】:

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

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

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

如果您在发布之前实际选择了列表框中的项目,则此方法可以正常工作。不过,这并不是我认为此 UI 应有的行为方式。

希望这是有道理的, 尼克

【问题讨论】:

  • 有没有办法可以在提交时重现服务器端的原始项目列表? (我的意思是你显然是从某个地方提供的)。然后是原始项目 - 已选项目 = 未选项目。
  • 不是真的,因为没有选定的项目。列表框包含项目但未选中,因此不要注册服务器端

标签: asp.net-mvc post listbox


【解决方案1】:

感谢各位的帮助。我忘了提到我正在使用 jQuery 填充所选项目列表框。不确定这是否重要。

最后,我通过在发布之前使用 jQuery 选择所有 onclick 项目来修复它。似乎是最简单的解决方案。

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      好的,澄清。您有左右列表框。左边的一个持有可用的项目,选择的项目被发布然后添加。右侧保存当前添加的项目,选择的项目已发布,然后从添加的项目中删除

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

      <input type="hidden" name="currently_added" value="itemid" />
      

      隐藏字段。

      是的,您可以使用 jQuery,但这是一种简单的方法;并非每个站点都应设计为需要打开 JavaScript。上述解决方案无需启用 JavaScript 即可工作。

      您的页面帖子将为您提供 3 个数组:

      1. 左侧框选择要添加的项目
      2. 要删除的右侧框选定项目
      3. 隐藏字段 - 已添加项目

      您取 (3),从中删除 (2),添加 (1),然后显示相同的页面或做任何您想做的事情。

      【讨论】:

      • 对不起,我对你的回答感到困惑。你能澄清一下吗?
      猜你喜欢
      • 2014-12-13
      • 2013-08-09
      • 1970-01-01
      • 2021-09-17
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      相关资源
      最近更新 更多