Я только что написал это вместе, используя автозаполнение из jQuery UI v1.8rc3 (я думаю, что это старая версия; она работает с jQuery 1.4.2), и WCF 3.5 (также один из выпусков)даты).Вот как я это сделал.
Служба WCF
using System;
using System.Linq;
using System.Collections.Generic;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Runtime.Serialization;
namespace Ionic.Samples.Webservices._2010.Nov
{
[ServiceContract(Namespace="urn:Ionic.Samples" )]
public interface ICompletionService
{
[OperationContract]
[WebInvoke(Method = "GET",
RequestFormat=WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "getcompletions/{fragment}")]
List<String> GetCompletions(string fragment);
}
[ServiceBehavior(Name="WcfJqueryAutoComplete",
Namespace="urn:Ionic.Samples",
InstanceContextMode=InstanceContextMode.Single, // one instance for all requests
IncludeExceptionDetailInFaults=true)]
public class WcfJqueryAutoComplete : ICompletionService
{
private List<String> allCandidates;
public WcfJqueryAutoComplete()
{
allCandidates = new List<String>
{
"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November",
"December", "Yammer", "Yaw", "Yawn", "Auspiscious",
"Arbitrage", "Arbiter", "Arbor", "Ardor", "Ardent",
"Concrete", "Conscious", "Uptight", "Uplevel", "Friend",
"Depend", "Deepend", "Deepen", "Decommit", "Right", "Now",
"Knowledge", "Knight", "Know", "Knickers", "Wow", "Holy",
...
};
}
public List<String> GetCompletions(String fragment)
{
var frag = fragment.ToUpper();
// use LINQ to select candidates from the in-memory list.
// You could replace this with a SQL query.
var selection = from candidate in allCandidates
where candidate.ToUpper().StartsWith(frag)
select candidate;
return new List<String>(selection);
}
}
}
Файл .svc
<%@ ServiceHost
Language="C#"
Debug="true"
Service="Ionic.Samples.Webservices._2010.Nov.WcfJqueryAutoComplete"
%>
Соответствующий WCF .configinfo
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="JsonServiceEndpointBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service
name="Ionic.Samples.Webservices._2010.Nov.WcfJqueryAutoComplete"
>
<endpoint
address = ""
binding = "webHttpBinding"
contract = "Ionic.Samples.Webservices._2010.Nov.ICompletionService"
behaviorConfiguration = "JsonServiceEndpointBehavior"
bindingNamespace = "urn:Ionic.Samples"
/>
</service>
</services>
</system.serviceModel>
Логика Javascript
<script type="text/javascript">
<!--
var ajaxUrlBase1 = "/services/WcfJqueryAutoComplete.svc/";
$(document).ready(function() {
$("#input1").autocomplete({
// The source option can be an array of terms. In this case, if
// the typed characters appear in any position in a term, then the
// term is included in the autocomplete list.
// The source option can also be a function that performs the search,
// and calls a response function with the matched entries.
source: function(req, responseFn) {
$.ajax({
url : ajaxUrlBase1 + "getcompletions/" + req.term,
cache : false,
type : "GET", // http method
dataType: "json",
error : function(XMLHttpRequest,status,error){
alert("Error p1 s(" + status + ") e(" + error + ")");
},
success : function(msg, arg2, xhr){
try {
if (msg !== null) {
responseFn(msg);
} else {
alert("msg is null");
}
}
catch(e) {
alert("exception: " + e);
}
}
});
},
select: function(value, data){
// whatever you like here
}
});
});
-->
</script>
Это прекрасно работает.
ps: для отладки jQuery я обнаружил, что инструменты отладчика, включенные в FF или IE8 +, неоценимы.В IE8 нажмите F12, чтобы получить консоль отладчика.
Кроме того, при разработке я часто устанавливал div с id = msgs для сбора диагностической информации из логики javascript.Затем я использую эту функцию для добавления информации в нее на разных этапах выполнения.
function addMessage(msg, clear){
if (clear !== null && clear) {
$('#msgs').html("");
}
$('#msgs').append("<p>" + msg + "</p>");
}