我可以使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()函数?
答案 0 :(得分:3)
可悲的是,ASP.NET AJAX AutoComplete Extended 需要一个SOAP Web服务。
也就是说,CodePlex上提供了源代码,因此您可以修改它以获取JSON字符串。
就个人而言,当我在网站的其他地方使用jQuery时,我决定不使用ASP.NET AJAX的东西并使用jQuery插件(jQuery.Autocomplete)
这有以下额外的好处:
显然,如果您已经将框架加载到其他地方,那么您的里程可能会有所不同。
答案 1 :(得分:2)
如果使用ASMX Web服务的想法是一个问题,另一种方法是配置自动完成控件来调用页面方法,该方法可以驻留在相关页面(或控件)后面的代码中。
可以找到有关如何设置此内容的概述here。