我试图将Ajax Auto Complete Extender与Web项目中托管的WCF服务一起使用。已达到该服务,并且我已经验证了提琴手返回了结果,但是从未填充与自动完成扩展器关联的文本框。
服务合同如下:
[ScriptService]
[ServiceContract(Namespace = "")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public interface ICertificateService
{
[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
[WebInvoke(Method = "POST",
BodyStyle = WebMessageBodyStyle.Wrapped,
ResponseFormat = WebMessageFormat.Json)]
List<string> GetCompletionList(string prefixText, int count);
}
该实现只是返回一个填充的字符串列表。
aspx如下:
<asp:TextBox runat="server" ID="aceInstructors"></asp:TextBox>
<ajaxToolkit:AutoCompleteExtender runat="server"
ID="autoCompleteInstructor"
TargetControlID="aceInstructors"
ServiceMethod="GetCompletionList"
ServicePath="../../CertificateService"
MinimumPrefixLength="1"
CompletionInterval="1000"
EnableCaching="true" CompletionSetCount="5">
<Animations>
<OnShow> <HideAction Visible="true" /> </OnShow>
<OnHide> <HideAction Visible="false" /> </OnHide>
</Animations>
该服务的路由在Global.asax中进行如下配置:
private void RegisterRoutes()
{
RouteTable.Routes.Add(new ServiceRoute("CertificateService", new WebServiceHostFactory(), typeof(CertificateService)));
}
如前所述,当我在提琴手中观看时,我可以对服务进行加热,并且得到JSON格式的响应。以下是原始响应:
HTTP/1.1 200 OK
Server: Cassini/4.0.1.7
Date: Mon, 12 Sep 2011 16:44:16 GMT
X-AspNet-Version: 4.0.30319
Content-Length: 68
Cache-Control: private
Content-Type: application/json; charset=utf-8
Connection: Close
{"GetCompletionListResult":["Alpha","Beta","Gamma","Delta","Omega"]}
可能值得注意的是,如果我从Service合同中省略了ResponseFormat,则结果将以XML格式返回,并且文本框中将填充一个很长的未定义列表
我缺少基本的东西吗?
最佳答案
here解决了该问题。我需要解决的问题似乎与JSON包装和返回的方式有关。看来ajax工具套件自动完成扩展程序期望JSON内容被“ .d包装”。这是通过遵循提供的链接中的配置设置来完成的。
还应该注意,有一个启用了Ajax的WCF项目模板,它添加了这些web.config设置...知道可能会节省一些时间。
关于c# - 自动填充扩展器未填充,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7391225/