2011-04-11 54 views
1

aspx頁面代碼:無法調用的webmethod在自動完成文本框

<ajax:ScriptManager ID="ScriptManager1" runat="server"> 
<Services > 
    <ajax:ServiceReference Path="MyService.asmx" /> 
</Services> 
</ajax:ScriptManager> 

<asp:TextBox ID="txtMaterialNo" 
      Width="100%" runat="server" ></asp:TextBox> 


     <cc1:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" CompletionInterval="20" 
     MinimumPrefixLength="1" ServiceMethod="GetMaterialId" 
     ServicePath="MyService.asmx" TargetControlID="txtMaterialNo"> </cc1:AutoCompleteExtender> 

MyService.asmx

[ScriptService] 
[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
public class MyService : System.Web.Services.WebService 
public MyService() 
    { 

     //Uncomment the following line if using designed components 
     //InitializeComponent(); 
    } 

    [System.Web.Services.WebMethod] 
    public string[] GetMaterialId(string prefixMaterial) 
    { 
...... code 
.... return 
    } 
    } 

但是,當我打字到文本框中沒有建議來了,當我把斷點在GetMaterialId我可以看到它不是來這個函數,而是在textchange上調用MyService。

如何解決這個問題?爲什麼它調用構造函數而不是webmethod?

+0

什麼_is_它做什麼?嘗試使用[Fiddler](http://www.fiddler2.com)觀看網絡流量。 – 2011-04-11 19:59:04

+0

@John Saunders我在我的本地機器上運行它。 – Chris 2011-04-11 20:02:01

+0

@Chris:爲什麼這是一個問題? – 2011-04-11 20:16:47

回答

0

您需要添加ScriptMethodAttribute像這樣:

[WebMethod] 
    [ScriptMethod] 
    public string[] GetMaterialId(string prefixMaterial) 
    { 
     ...... code 
     .... return 
    } 
+0

我加了一樣但沒有運氣! – Chris 2011-04-12 06:04:05

0

我想你的方法簽名是錯誤的。它應該是:

List<string> GetMaterialId(string prefixMaterial, int count) 

其中count是要返回的項目數。

+0

我嘗試過,但編譯器根本沒有來這個功能。 – Chris 2011-04-12 06:03:47

0

您需要在您的源頁面註冊大會= 「AjaxControlToolkit」:

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %> 
+0

它工作嗎?你試過了嗎?投票,如果你有。 – MohammadMMohammad 2013-11-21 10:22:39