J'ai cherché partout sur ce site et sur le web pour une bonne et simple exemple de la saisie semi-automatique à l'aide de jQuery et ASP.NET. Je voulais exposer les données utilisées par la saisie semi-automatique avec un webservice (et sera probablement le faire la prochaine). Dans l'intervalle, j'ai eu ce travail, mais il semble un peu hacky...
Dans ma page j'ai une zone de texte:
<input id="txtSearch" type="text" />
Je suis à l'aide de jQuery autocomplete, définie par leur exemple:
<link rel="stylesheet" href="js/jquery.autocomplete.css" type="text/css" />
<script type="text/javascript" src="js/jquery.bgiframe.js"></script>
<script type="text/javascript" src="js/jquery.dimensions.pack.js"></script>
<script type="text/javascript" src="js/jquery.autocomplete.js"></script>
C'est là que ça commence à se hacky... j'appelle une page au lieu d'un webservice:
<script type="text/javascript">
$(document).ready(function(){
$("#txtSearch").autocomplete('autocompletetagdata.aspx');
});
</script>
Dans la page j'ai enlevé TOUT le code html et seulement cela (sinon, diverses HTML bits apparaître dans la saisie semi-automatique de liste déroulante):
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="autocompletetagdata.aspx.cs" Inherits="autocompletetagdata" %>
Et dans mon autocompletetagdata.aspx, je suis en utilisant Subsonique à la requête, le format et les données de retour à partir de la base de données (un seul élément de données par ligne):
protected void Page_Load(object sender, EventArgs e)
{
// Note the query strings passed by jquery autocomplete:
//QueryString: {q=a&limit=150×tamp=1227198175320}
LookupTagCollection tags = Select.AllColumnsFrom<LookupTag>()
.Top(Request.QueryString["limit"])
.Where(LookupTag.Columns.TagDescription).Like(Request.QueryString["q"] + "%")
.OrderAsc(LookupTag.Columns.TagDescription)
.ExecuteAsCollection<LookupTagCollection>();
StringBuilder sb = new StringBuilder();
foreach (LookupTag tag in tags)
{
sb.Append(tag.TagDescription).Append("\n");
}
Response.Write(sb.ToString());
}
Si vous ne faites pas COMME requête, puis il renvoie à tout ce qui contient un match pour le personnage(s) type (par exemple, en tapant "une" comprendra "Demander" et "Réponse", ainsi que "Mars" et "Mega." Je voulais juste faire un commence avec le match.
De toute façon, il fonctionne, et il est assez facile à mettre en place, mais est-il une meilleure façon?