2009-09-22 88 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