Jquery选择了多个select,如何在asp.net中获取服务器端的选择值?

时间:2013-08-14 13:33:11

标签: asp.net webforms jquery-chosen

我正在重振一个非常古老的应用程序,并尝试不将Devexpress或Telerik引入此应用程序。

我需要一些具有多种选择可用性的下拉列表。我在网上搜索过,所选择的jquery插件看起来就像是要走的路。

我已经在我的一个测试页面中实现了它,但是我试图在没有太多工具的情况下快速实现它。我在后面的代码中抓取服务器端的多个选定值时遇到了一些困难。我真的不想拥有一堆客户端功能来保存和维护变更等数据。

任何人都试图进入这个数据服务器端而不是客户端并且运气好吗?

代码示例。 :

<select id="slcExample" multiple class="chosen-select" style="width:350px;" runat="server"></select>

<script type="text/javascript">
        $(document).ready(function () {
            var config = {
                '.chosen-select': {},
                '.chosen-select-deselect': { allow_single_deselect: true },
                '.chosen-select-no-single': { disable_search_threshold: 10 },
                '.chosen-select-no-results': { no_results_text: 'Oops, nothing found!' },
                '.chosen-select-width': { width: "95%" }
            }
            for (var selector in config) {
                $(selector).chosen(config[selector]);
            }
        });
  </script>

我发现如果我能够获得这个属性.SelectedIndices我可以访问所选的值,但它不会让我在服务器端使用它,因为它是asp.net中select的受保护属性

4 个答案:

答案 0 :(得分:1)

这是我最终做的事情。 :

        Dim index As Integer
        Dim valuesChosen As String = ""
        For index = 0 To (slcExample.Items.Count - 1)
            If (slcExample.Items(index).Selected) Then
                valuesChosen += slcExample.Items(index).Value.Trim + ";"
            End If
        Next

我在服务器端需要一些东西。希望这有助于其他人。如果你有更好的选择,我愿意看到它并且如果更好的话会标记为答案。

答案 1 :(得分:0)

您可以使用asp:net class创建隐藏字段。使用javascript方法,在逗号分隔列表中添加所有值。

提交表单后,您可以在服务器端列出该列表。

尝试clientIDMode="Static"

<asp:HiddenField runat="server" ID="hidTest" ClientIDMode="Static" />

但如果你不能,你将不得不看到asp生成的名称在你的javascript方法中更新它

<script type="text/javascript">
        $(document).ready(function () {
            var config = {
                '.chosen-select': {},
                '.chosen-select-deselect': { allow_single_deselect: true },
                '.chosen-select-no-single': { disable_search_threshold: 10 },
                '.chosen-select-no-results': { no_results_text: 'Oops, nothing found!' },
                '.chosen-select-width': { width: "95%" }
            }
            var hiddenSeparatedList = "";
            for (var selector in config) {
                hiddenSeparatedList += $(selector).chosen(config[selector]) + ','
                $('#hidTest').val(hiddenSeparatedList);
            }
        });
  </script>

答案 2 :(得分:0)

我遇到了同样的问题,转而使用这个JQuery插件:http://www.erichynds.com/blog/jquery-ui-multiselect-widget

由于asp.net下拉控件不允许多个项目,因此我使用了带有runat服务器和ID的常规标签。该插件实际上选择了项目,然后您可以从后面的代码中读取它们。

该插件将在asp.net下拉列表的客户端工作,但您无法在后面的代码中获取所选项目。所以根据你的需要......

希望这有帮助! 邦尼

答案 3 :(得分:0)

我改为使用了List:

        int i;
        IList<string> chosenItems = new List<string>();
        for (i = 0; i <= selectExample.Items.Count - 1; i++)
        {
            if (selectExample.Items[index].Selected)
            {
                chosenItems.Add(selectExample.Items[index].Value.Trim());
            }
        }