【问题标题】:How can i populate and optimize DropDownList from WebService using Select2.js如何使用 Select2.js 从 WebService 填充和优化 DropDownList
【发布时间】:2020-05-19 18:46:27
【问题描述】:

我正在开发 客户选择 模块,该模块将在打字时autocomplete。似乎Select2.js 可以完成这项工作,我已经设法填充了我的dropdownlist,但是在后端(.cs 文件)上使用了一个简单的数据绑定。

问题是,我只处理 15 位客户的样本数据,所以性能还不错,我预计会有近 2000 位客户的实际数据,所以仅仅通过绑定就会搞砸性能。

这是我的select2.js的绑定事件和实现代码

.aspx 文件:

<asp:DropDownList runat="server" ID="ddlCustomers" CssClass="form-control" async="">
   <asp:ListItem></asp:ListItem>
</asp:DropDownList>

.cs 文件:

protected void BindDropDownCustomers()
{
    DataTable dt = SharedClass.getAPI("CustomerProfile_All"); //Returns Data from Webservice
    DataColumn newColumn = new DataColumn();

    //just formating the display
    newColumn.ColumnName = "FullName";
    newColumn.DataType = System.Type.GetType("System.String");
    newColumn.Expression = "Cust_Last_Name+', '+Cust_First_Name";
    dt.Columns.Add(newColumn);
    ddlCustomers.DataTextField = "FullName";
    ddlCustomers.DataValueField = "SmartCardID";
    ddlCustomers.DataSource = dt.DefaultView;
    ddlCustomers.DataBind();
    ddlCustomers.Items.Insert(0, new ListItem("Select Customer", ""));
}

select2.js 脚本:

$('#<%= ddlCustomers.ClientID %>').select2({
   placeholder: "Select customer",
   minimumResultsForSearch: 2,
   minimumInputLength: 3,
   allowClear: true
});

我想要这样的东西,在用户输入至少 3 个字符后,将执行查询并获取将填充 dropdownlist 并同时限制或优化显示的所有相关数据。

【问题讨论】:

    标签: asp.net jquery-select2


    【解决方案1】:

    好吧,在我看来,使用javascript 在客户端计算机上运行循环 2000 次(最好检查用户输入的字符是否超过 3 个)很好,而不是在用户键入内容时调用服务器并打开SQL Connection 来查询某些内容。想象一下,当网络变慢时,延迟会更多,如果成千上万的用户对服务器进行相同的调用,而服务器只是在搜索记录呢?嗯,这只是一个意见。当然,你可以决定什么是适合你的。

    如果您仍然想这样做,您可以寻找一些付费控件或查看 ajax 工具包中是否有一个。 此外,如果您想以自定义方式执行此操作,则可以使用jquery-ui autocomplete 来完成任务。

    我不会提供执行此操作的源代码,但这是您可能想要做的粗略想法:

    1. 在加载时显示一些基本的记录
    2. jQuery-UI autocomplete 连接到正在搜索并从数据库返回结果的文本框
    3. 当您收到响应时添加自定义 HTML,因为它在您的 HTML 页面中,并连接 jquery/javascript 事件以选择相关值。

    希望这能提供一个粗略的想法。

    【讨论】:

    • 实际上 select2.jsminimumInputLength 已经检查了客户端输入的字符。但我也会尝试处理 JQuery-ui 自动完成,我只是想如果在这种情况下,我怎样才能获得所选结果的隐藏值。因为在 select2 中,它是一个选择元素,并且具有价值。另一方面,文本框只是自动完成它。
    • 好吧,我的建议是,您可以将autocomplete 连接到您的 select2.js 下拉列表中的输入控件,这样用户可以获得类似下拉列表的体验,您可以只查询后面的数据现场。当然,如果你想使用文本框,你可以使用它,但只要项目被选中,你就可以将值保存在一个隐藏字段中,该字段只跟踪下拉列表中的选定值,并在用户开始输入内容或更改时清除文本框的内容。
    • 此外,如果您检查显示的 select2.js 下拉列表,您会发现它没有使用选择项,它会将您的选择项转换为无序列表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    相关资源
    最近更新 更多