2012-04-26 239 views
0

我有一个通用的处理程序,所以我可以使用jquery.ui Autocomplete,但处理程序不会触发。Generic Handler not firing

继承人我的代码: ASPX

<%--------- -------- Autocomplete ----------- --%> 
<link type="text/css" href="../css/ui-lightness/jquery.ui.all.css" rel="stylesheet" /> 
<script type="text/javascript" src="../js/jquery.ui.widget.js"></script> 
<script type="text/javascript" src="../js/jquery.ui.position.js"></script> 
<script type="text/javascript" src="../js/jquery.ui.autocomplete.js"></script> 
<link href="../css/demos.css" rel="stylesheet" type="text/css" /> 
<script type="text/javascript"> 

    function jqueryUI_autocomplete_update_backgroundColor(textbox) { 
     var loginId = $(textbox).next().val(); 

     if (!textbox.disabled && loginId == "") 
      textbox.style.backgroundColor = "#ff9999"; 
     else 
      textbox.style.backgroundColor = ""; 
    } 

    $(function() { 
     $("#user").autocomplete({ 
      source: "Handler1.ashx", 
      minLength: 1, 
      select: function (event, ui) { 
       $(this).next().val(ui.item.id); 
       $("input[id=UserId]")[0].value = ui.item.id; 
       $("input[id=DisplayName]")[0].value = ui.item.value; 
       jqueryUI_autocomplete_update_backgroundColor(this); 
      }, 

      search: function (event, ui) { 
       $(this).next().val(''); 
       $("input[id=UserId]")[0].value = ''; 
       $("input[id=DisplayName]")[0].value = ''; 
       jqueryUI_autocomplete_update_backgroundColor(this); 
      } 
     }) 

      $("#user").data("autocomplete")._renderItem = function (ul, item) 
      { 
       item.label = item.label.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + $.ui.autocomplete.escapeRegex(this.term) + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>"); 
       return $("<li></li>") 
       .data("item.autocomplete", item) 
       .append("<a>" + item.label + "</a>") 
       .appendTo(ul); 
      }; 

    }); 
</script> 

Handler1.ashx

/// <summary> 
/// Summary description for Handler1 
/// </summary> 
/// 
[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 

public class Handler1 : IHttpHandler 
{ 

    public void ProcessRequest(HttpContext context) 
    { 
     IList<Project_Data.User> usersList = Project_BLL.Users.ListUsers(); 
     var data = new List<Project_BLL.Users>(); 

     foreach (Project_Data.User user in usersList) 
     { 
      data = new List<Project_BLL.Users>{ 
       new Project_BLL.Users {UserId = user.Id.ToString(), DisplayName = user.Name} 
      }; 
     } 

     int limit = 10; 
     if (HttpContext.Current.Request.QueryString["limit"] != null) 
      limit = Convert.ToInt32(HttpContext.Current.Request.QueryString["limit"]); 

     string q = ""; 
     if (HttpContext.Current.Request.QueryString["term"] != null) 
      q = HttpContext.Current.Request.QueryString["term"]; 

     List<Project_BLL.Users> result = null; 
     var sb = new StringBuilder(); 
     if (q.Trim() != "") 
     { 
      var query = data.Where(p => p.DisplayName.ToLower().Contains(q.ToLower())) 
       .OrderBy(p => p.DisplayName); 
      result = query.Take(limit).ToList(); 

      foreach (var item in result) 
       sb.AppendFormat("{0}{1}|{2}", (sb.Length > 0 ? "\n" : ""), item.DisplayName, item.UserId); 
     } 

     context.Response.ContentType = "text/plan"; 
     context.Response.Write(JsonConvert.SerializeObject(result.Select(u => new { id = u.UserId, value = u.DisplayName }).ToList())); 

    } 

Webconfig

<configuration> 
    <system.web> 
    <compilation debug="true" targetFramework="4.0"/> 
    <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/> 

    <authentication mode="Forms"> 
     <forms name="TestAuthCookie" loginUrl="login.aspx" timeout="1500"> 
     </forms> 
    </authentication> 

    <authorization> 
     <deny users="?"/> 
    </authorization> 
    </system.web> 

    <location path="images"> 
    <system.web> 
     <authorization> 
     <allow users="*" /> 
     </authorization> 
    </system.web> 
    </location> 

    <location path="App_Themes"> 
    <system.web> 
     <authorization> 
     <allow users="*" /> 
     </authorization> 
    </system.web> 
    </location> 

    <location path="js"> 
    <system.web> 
     <authorization> 
     <allow users="*" /> 
     </authorization> 
    </system.web> 
    </location> 

    <location path="css"> 
    <system.web> 
     <authorization> 
     <allow users="*" /> 
     </authorization> 
    </system.web> 
    </location> 

</configuration> 
+0

完整引用你能告诉你的web.config? – 2GDev 2012-04-26 14:39:04

+0

只是加了它.. – Luis 2012-04-26 14:41:26

回答

0

尝试改变来源:

$(function() { 
     $("#user").autocomplete({ 
      source: function(request, response) { 
       $.ajax({ 
        url: "handler1.ashx", 
        data: { 
         foo: request.term 
        }, 
       }); 
      }, 


      minLength: 1, 
      select: function (event, ui) { 
       $(this).next().val(ui.item.id); 
       $("input[id=UserId]")[0].value = ui.item.id; 
       $("input[id=DisplayName]")[0].value = ui.item.value; 
       jqueryUI_autocomplete_update_backgroundColor(this); 
      }, 

here你可以找到一个工作示例(查看源代码)

从JQuery的网站:

只需指定源选项,即可自定义自动完成功能以使用各种数据源。数据源可以是:

  • 与本地数据
  • 一个字符串,指定URL
  • 一个回调

你必须指定一个回调,使一个帖子/数组去你的ashx。

Here为$就

回调

+0

试过,但没有工作.. – Luis 2012-05-02 09:01:14

+0

回答编辑看看... – 2GDev 2012-05-02 11:29:36

+0

我不知道该怎么做,是从来没有叫过不知道为什么,我有一个断点来检查它是否被调用,并且永远不会输入 – Luis 2012-05-02 14:19:01

0

哪里是在这个web.config文件的HttpHandlers的部分?如果你希望你的处理工作,你必须在web.config中定义它

+0

或者使处理程序的端点成为ASHX;实际上有一个Handler1是代码隐藏的ASHX容器(不是真正的'页面')。 – 2012-04-26 14:48:06

+0

我的处理程序是一个ashx文件 – Luis 2012-04-26 15:42:31

+0

只需在webconfig中设置此值,但给我一个错误: 错误:无法加载类型'Handler1'。 – Luis 2012-04-26 15:43:42