我正在重振一个非常古老的应用程序,并尝试不将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的受保护属性
答案 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());
}
}