ASP.NET MVC& ASP.NET AJAX Toolkit AutoCompleteExtender

时间:2009-09-22 13:59:31

标签: .net asp.net asp.net-mvc json asp.net-ajax

我可以使ASP.NET AJAX AutoCompleteExtender使用ASP.NET MVC JsonResult而不是ASMX Web服务吗?

我在ASP.NET MVC View上有一个ASP.NET AJAX Toolkit 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()函数?

2 个答案:

答案 0 :(得分:3)

可悲的是,ASP.NET AJAX AutoComplete Extended 需要一个SOAP Web服务。

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

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

这有以下额外的好处:

  1. 接受JSON字符串。
  2. 只需要2个脚本引用(jQuery和AutoComplete脚本),而不是ASP.NET AJAX选项所需的7个。
  3. 我可以很容易地获得jQuery和AutoComplete的缩小版本,但是ASP.NET AJAX下载中的ClientSide只有脚本是非缩小的(除非我错过了什么)。
  4. 显然,如果您已经将框架加载到其他地方,那么您的里程可能会有所不同。

答案 1 :(得分:2)

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

可以找到有关如何设置此内容的概述here