2017-04-11 67 views
0

有人可以告訴我爲什麼WebMethod不是單獨在一個頁面中觸發,這個代碼在另一個頁面中工作,但不在我希望它工作的頁面中。我把這整個代碼轉移到一個新的頁面,它在那裏工作得非常好,但是如果我在我的實際頁面中使用它,它不會觸發webmethod。不知道發生了什麼事。Asp .net ajax autocomplete不起作用。 Webmethod沒有被調用

<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.10.0.min.js" type="text/javascript"></script> 
<script src="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.9.2/jquery-ui.min.js" type="text/javascript"></script> 
<link href="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.9.2/themes/blitzer/jquery-ui.css" rel="Stylesheet" type="text/css" /> 

    <script type="text/javascript"> 
      $(function() { 
     $("[id$=txtSkill]").autocomplete({ 
      source: function (request, response) { 
       $.ajax({ 
        url: '<% =ResolveUrl("HRMCareerEAF.aspx/GetSkills") %>', 
        data: "{ 'prefix': '" + request.term + "'}", 
        dataType: "json", 
        type: "POST", 
        contentType: "application/json; charset=utf-8", 
        success: function (data) { 
         response($.map(data.d, function (item) { 
          return { 
           label: item.split('-')[0], 
           val: item.split('-')[1] 
          } 
         })) 
        }, 
        error: function (response) { 
         alert(response.responseText); 
        }, 
        failure: function (response) { 
         alert(response.responseText); 
        } 
       }); 
      }, 
      select: function (e, i) { 
       $("[id$=hfSkillID]").val(i.item.val); 
      }, 
      minLength: 1 
     }); 
    }); 
    </script> 

                         <asp:TextBox ID="txtSkill" runat="server" style="text-align: center" /> 

[WebMethod(EnableSession = true)] 
    public static string[] GetSkills(string prefix) 
    { 
     HRMRecruitmentProcessDAL obj = new HRMRecruitmentProcessDAL(); 
     DataSet ds = obj.BindMstcommon(HttpContext.Current.Session["CandidateID"].ToString(), "GetSkillsDD", "%" + prefix + "%"); 
     List<string> skills = new List<string>(); 
     for (int i = 0; i < ds.Tables[0].Rows.Count; i++) 
     { 
      skills.Add(string.Format("{0}-{1}", ds.Tables[0].Rows[i]["Skill_Desc"].ToString(), ds.Tables[0].Rows[i]["skill_id"].ToString() + "|" + ds.Tables[0].Rows[i]["Skill_GroupID"].ToString())); //ds.Tables[0].Rows[i]["Skill_GroupDesc"].ToString() + " : " + 
     } 
     return skills.ToArray(); 
    } 
+0

服務器或瀏覽器上的任何錯誤? 「不工作」不會說太多 - 顯然它不起作用,或者你不會問一個問題 –

+0

向我們顯示警報中的錯誤。您可能希望在調試的每個步驟中都加入警報 –

+0

自動完成功能不會顯示在我的文本框下方,但會顯示我是否將此代碼移至新頁面。當我嘗試調試時,我明白我的webmethod沒有被調用,當我在我的文本框中鍵入內容時。 –

回答

0

非常感謝您的支持。 我發現問題和解決方案。

實際的問題是,自動完成後部分頁面回發不工作,我的txtskill是第三視圖的ASP:多視圖刷新頁面內部我的更新面板的一部分。

如果頁面部分回發,Jquery方法不會綁定。我在下面的鏈接中找到了解決方案。

Jquery Auto complete extender not working after postback

我改變了代碼如下。

<script type="text/javascript"> 
     $(function() { 
      SetAutoComplete(); 
     }); 
     $(document).ready(function() { 
      var prm = Sys.WebForms.PageRequestManager.getInstance(); 
      prm.add_initializeRequest(InitializeRequest); 
      prm.add_endRequest(EndRequest); 

      // Place here the first init of the autocomplete 
      SetAutoComplete(); 
     }); 

     function InitializeRequest(sender, args) { 
     } 

     function EndRequest(sender, args) { 
      // after update occur on UpdatePanel re-init the Autocomplete 
      SetAutoComplete(); 
     } 
     function SetAutoComplete() { 
      $("[id$=txtSkill]").autocomplete({ 
       source: function (request, response) { 
        $.ajax({ 
         url: '<% =ResolveUrl("HRMCareerEAF.aspx/GetSkills") %>', 
         data: JSON.stringify({ prefix: request.term }), 
         dataType: "json", 
         type: "POST", 
         contentType: "application/json; charset=utf-8", 
         success: function (data) { 
          response($.map(data.d, function (item) { 
           return { 
            label: item.split('-')[0], 
            val: item.split('-')[1] 
           }; 
          })) 
         } 
        }); 
       }, 
       select: function (e, i) { 
        $("[id$=hfSkillID]").val(i.item.val); 
       }, 
       minLength: 1 
      }); 
     } 
    </script> 

非常感謝您的支持。

0

能否請你檢查幾件事情

1)檢查,如果你能使用REST API測試工具,如郵遞員

2調用API)。如果你可以訪問它,你可以請檢查如果Web開發者工具控制檯,如果它有任何錯誤,如404(未找到)或500(內部服務器錯誤)

3)修改

data: "{ 'prefix': '" + request.term + "'}", 

data: JSON.stringify({ prefix: request.term }), 

請檢查 '<%= RESOLVEURL( 「HRMCareerEAF.aspx/GetSkills」)%>'

我也值我不確定,但嘗試擺脫(EnableSession = true)。