Je dois lier près de 50 000 enregistrements à ma liste déroulante asp.net, qui doit être interrogeable. Quelle est la meilleure façon de le mettre en œuvre? Existe-t-il des techniques de mise en cache permettant de charger la liste lors du défilement? Appréciez les suggestions.
S’il vous plaît donnez votre avis.
Vous pouvez y parvenir en utilisant le service Web.
Tout d’abord, ajoutez le code suivant dans votre page aspx.
Maintenant, créez votre service Web en utilisant le code suivant.
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; using System.Data.SqlClient; [System.Web.Script.Services.ScriptService] public class WebService : System.Web.Services.>WebService { [WebMethod] public List ShowCountryList(ssortingng sLookUP) { List lstCounsortinges = new List (); ssortingng sConnSsortingng = "Data Source=DNA;Persist Security Info=False;" + "Initial Catalog=DNA_CLASSIFIED;User Id=sa;Password=;Connect Timeout=30;"; SqlConnection myConn = new SqlConnection(sConnSsortingng); SqlCommand objComm = new SqlCommand("SELECT CountryName FROM Country " + "WHERE CountryName LIKE '%'+@LookUP+'%' ORDER BY CountryName", myConn); myConn.Open(); objComm.Parameters.AddWithValue("@LookUP", sLookUP); SqlDataReader reader = objComm.ExecuteReader(); while (reader.Read()) { lstCounsortinges.Add(reader["CountryName"].ToSsortingng()); } myConn.Close(); return lstCounsortinges; } }
Enfin, Create jquery Method pour lier Textbox avec webservice,
Je vous recommande de tirer parti du plugin autocomplete de jQuery:
https://jqueryui.com/autocomplete/
Il est configurable et propose une recherche automatique complète. Il peut également utiliser votre source de données distante (bien que vous puissiez envisager une réponse d’API paginée):
Dans le backend, créez une controller action
(si vous utilisez ASP.NET MVC) ou une page method
(si vous utilisez ASP.NET Web Forms) qui reçoit un paramètre searchTerm
et retourne un tableau du haut (par exemple, 100 ) résultats.
Dans le frontend, utilisez un plugin typeahead / autocomplete tel que celui-ci . Lorsque l’utilisateur définit le terme de recherche, effectuez une requête Ajax sur le backend et affichez les résultats. Lors de l’exécution de la demande Ajax , vous pouvez également activer et configurer la mise en cache. Aucune optimisation supplémentaire ne sera nécessaire.
Utilisez la zone de saisie semi-automatique et définissez la source de données à partir d’une API distante, en particulier lorsque vous travaillez avec un dataset volumineux. Cela évitera que l’interface utilisateur de votre application ne soit pendue à chaque recherche de personnage.
Référez-vous au lien: https://github.com/ghiden/angucomplete-alt
dépend de la provenance des éléments de la liste. s’ils viennent d’une liste ou d’une firebase database, ajoutez-les, puis utilisez JavaScript pour effectuer une recherche dans la liste.
public class Department { public int Id { get; set; } public ssortingng Name { get; set; } } private static List GetDepartment() { List departments = new List (); for (int i = 0; i < 10000; i++) { Department department = new Department(); department.Id = i; department.Name = "Department " + i.ToString(); departments.Add(department); } return departments; } [WebMethod] public static List GetDepartment(ssortingng departmentName) { int totalDepartments = GetDepartment().Count; List departments = GetDepartment().Where(d => d.Name.ToLower().StartsWith(departmentName.ToLower())).Take(20).ToList(); return departments; }
J’ai eu le même problème que toi et j’ai utilisé RadAutoCompleteBox . Il comporte de nombreux événements côté client et côté serveur qui vous aident à gérer diverses situations. C’est très confortable pour les projets ASP.NET.
Je vois deux solution immédiate pour cela.
Similaire à celui-ci :
En définitive, toute implémentation Autocomplete fonctionnera dans votre scénario.
Solution 1: Utiliser la case à cocher Autocomplete
Solution 2 : utilisez select avec virtualisation
Mais si vous voulez donner le meilleur de la convivialité à vos clients , vous devez choisir une solution dans laquelle votre zone de sélection est virtualisée et les données chargées dans DOM
lors du défilement de la zone de sélection. Grâce à la virtualisation, vous vous assurez que seuls les éléments en cours d’affichage sur l’écran sont transférés à DOM .
Vous pouvez trouver une sélection virtuelle basée sur jQuery ici
Une implémentation similaire dans React here