2012-04-29 67 views
2

我有一个调用ASP.NET处理程序来完成自动完成功能的web部件。Web部件调用Web处理程序

ASHX File 
    <%@ WebHandler Language="C#" Class="MyService.MyAutoComplete" CodeBehind="MyAutoComplete.ashx.cs" %> 

代码文件

namespace MyService 
{ 
    /// <summary> 
    /// Summary description for MyAutoComplete 
    /// </summary> 
    public class MyAutoComplete : IHttpHandler 
    { 
     public void ProcessRequest(HttpContext context) 
     { 
      var searchTerm = context.Request.QueryString["term"].ToString(); 

      context.Response.Clear(); 
      context.Response.ContentType = "application/json"; 


      var search = GetList(); 

      JavaScriptSerializer jsSerializer = new JavaScriptSerializer(); 
      string json = jsSerializer.Serialize(search); 
      context.Response.Write(json); 
      context.Response.End(); 
     } 

    } 
} 

背后,这是我的JQuery调用

$(function() { 
      $("#<%= txtSearchInput.ClientID %>").autocomplete({ 
       source: "/_Layouts/My Service/MyAutoComplete.ashx", 
       minLength: 2, 
       select: function (event, ui) { 
        $(this).val(ui.item.value); 
       } 
      }); 
     }); 

“我的服务” 为布局的SharePoint文件夹中的WebPart项目中。

当我做呼叫救援人员到场的JQuery它引发以下错误 “无法创建类型‘MyService.MyAutoComplete’”

任何帮助表示赞赏。

+0

您是否添加了对该dll文件的引用?如果不添加并重新生成应用程序。 – coder

+0

@coder处理程序是webpart项目的一部分。所以我认为我们不需要任何参考。 – Yass

+0

另外我想你可以有一个调用你的处理程序的小问题。你给jQuery自动完成的相对URL“/ _Layouts/My Service/MyAutoComplete.ashx”,这就是为什么它会在网站收集的根网站下调用它,所以你可以在权限,列表查询等方面有问题。当然我无法确定,也许这是你设计的一部分。但看看SharePoint js api SP.Utilities.Utility.getLayoutsPageUrl([yourHandlerUrl]) http://msdn.microsoft.com/en-us/library/ee659418.aspx 它会根据网站集中的当前网站生成url 。 –

回答

0

它似乎SharePoint组件有自己的识别组件:)的方式。谷歌搜索后,我发现了以下解决方案。

<%@ WebHandler Language="C#" Class="MyService.MyAutoComplete,MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=87c41094797c589e" %> 
1

在实施IHttpHandler,你必须提供一个实现:

因此,MyAutoComplete类不能被实例化,因为它不提供所有IHttpHandler的抽象成员的实现。

因为你的处理器显然是无状态的,你可以实现IsReusable如下:

public bool IsReusable 
{ 
    get { 
     // Handler is stateless, we can reuse the same instance 
     // for multiple requests. 
     return true; 
    } 
} 
+0

谢谢你的回应。我没有包含IsReusable接口,只是为了节省一些空间。如果我们没有实现接口,那么代码甚至不会编译,你会得到编译时错误。 – Yass