无法在自动填充文本框中调用webmethod

时间:2011-04-11 19:55:32

标签: asp.net autocomplete ajaxcontroltoolkit webmethod

aspx页面代码:

<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?

4 个答案:

答案 0 :(得分:1)

Myabe您的项目未设置为AJAX.NET站点;试试Adding ASP.NET AJAX to an Existing ASP.NET Application

答案 1 :(得分:0)

我认为你的方法签名是错误的。应该是:

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

其中count是要返回的项目数。

答案 2 :(得分:0)

您需要像这样添加ScriptMethodAttribute

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

答案 3 :(得分:0)

您需要在源页面中注册Assembly =“AjaxControlToolkit”:

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