2009-09-22 127 views
0

我可以使ASP.NET AJAX AutoCompleteExtender使用ASP.NET MVC JsonResult而不是ASMX Webservice吗?ASP.NET MVC&ASP.NET AJAX工具包AutoCompleteExtender

我在ASP.NET MVC视图上有一个ASP.NET AJAX工具包AutoCompleteExtender。它在我的MVC控制器中使用了JsonResult类型的函数。

ASP.NET MVC查看:

<form runat="server"> 
    <asp:ScriptManager 
     ID="ScriptManager1" 
     runat="server" 
     EnableScriptGlobalization="true" /> 
    <ajaxToolkit:AutoCompleteExtender 
     ID="autoComplete1" 
     runat="server" 
     TargetControlID="TextBox1" 
     ServiceMethod="find" 
     ServicePath="/thing" 
     MinimumPrefixLength="1" 
     CompletionInterval="1000" 
     EnableCaching="true" 
     CompletionSetCount="20" 
     DelimiterCharacters=";" 
     ShowOnlyCurrentWordInCompletionListItem="true" /> 
    <asp:TextBox 
     ID="TextBox1" 
     runat="server" /> 
</form> 

ASP.NET MVC控制器:

<AcceptVerbs(HttpVerbs.Post)> _ 
Function Find(ByVal collection As FormCollection) As JsonResult 
    Dim search As String = collection(0) 
    Dim j As New JsonResult 
    j.Data = ... 
    Return j 
End Function 

这失败因为collection.Count是0。此外,Request.QueryString.Count为0

如何将输入的字符串传递给Find()函数?

回答

3

不幸的是,ASP.NET AJAX自动完成扩展需要 SOAP Web服务。

也就是说,源代码在CodePlex上可用,因此您可以修改它以获取JSON字符串。

就个人而言,我是使用jQuery其他地方的网站上,我决定不使用ASP.NET AJAX的东西,并用jQuery插件去(jQuery.Autocomplete

这具有额外的好处:

  1. 接受JSON字符串。
  2. 只需要2个脚本引用(jQuery和AutoComplete脚本),而不是我需要的ASP.NET AJAX选项。
  3. 我可以很容易地得到jQuery和AutoComplete的缩小版本,但ASP.NET AJAX下载中仅ClientSide脚本未缩小(除非我遗漏了某些内容)。

显然,如果您已经在其他地方加载了框架,那么您的里程可能会有所不同。

+0

我用jQuery代替。它运作良好。 http://stackoverflow.com/questions/1533761/jquery-email-address-input/1533790#1533790 – 2009-10-26 16:45:53

2

如果使用ASMX Web服务的想法是一个问题,另一种替代方法是配置自动完成控件以调用页面方法,该方法可驻留在有问题的页面(或控件)后面的代码中。

有关如何设置的概述可参见here