2013-03-18 161 views
0

我已經設法使用webservice在C#.net中使用JQuery自動完成功能。從WebService填充自動完成

這裏是ASP代碼:

<div class="row"> 
    <div class="span4"> 
     <h3> 
      Manage Season</h3> 
    </div> 
</div> 
<div class="row"> 
    <div class="span2"> 
     <p> 
      <label class="control-label" for="TeamName"> 
       Team Name:</label></p> 
    </div> 
    <div class="span3"> 
     <asp:TextBox ID="TeamNameTextBox" runat="server" CssClass="searchinput"></asp:TextBox> 
     <asp:Button ID="AddTeamButton" CssClass="btn btn-primary" runat="server" Text="Add" 
      OnClick="AddTeamButton_Click" /> 
    </div> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     $(".searchinput").autocomplete({ 
      source: function (request, response) { 
       $.ajax({ 
        type: "POST", 
        contentType: "application/json; charset=utf-8", 
        url: "PredictiveSearch.asmx/GetAllPredictions", 
        data: "{'keywordStartsWith':'" + request.term + "'}", 
        dataType: "json", 
        async: true, 
        success: function (data) { 
         response(data.d); 

        }, 
        error: function (result) { 
         alert("Due to unexpected errors we were unable to load data"); 
        } 
       }); 
      }, 
      minLength: 1 
     }); 
    }); 
</script> 

和C#的Web服務:

[System.Web.Script.Services.ScriptService] 
public class PredictiveSearch : System.Web.Services.WebService 
{ 

    [WebMethod] 
    public IList<string> GetAllPredictions(string keywordStartsWith) 
    { 
     //TODO: implement real search here! 

     SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["RaiseFantasyLeagueConnectionString"].ConnectionString); 
     SqlCommand cmd = new SqlCommand("[dbo].[findEnglishTeams]", conn); 
     cmd.CommandType = CommandType.StoredProcedure; 

     string searchTerm = keywordStartsWith; 
     SqlParameter searchTermParam = new SqlParameter("@searchterm", searchTerm); 

     cmd.Parameters.Add(searchTermParam); 

     IList<string> output = new List<string>(); 

     conn.Open(); 
     SqlDataReader dReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
     if (dReader.HasRows) 
     { 
      while (dReader.Read()) 
      { 
       output.Add(dReader["englishTeamName"].ToString()); 
      } 
      return output; 
     } 
     else 
     { 
      return output; 
     } 
    } 
} 

我需要讓我很填充下拉與價值觀的ID,這是怎麼可能?

+0

我不明白的問題,你能詳細點嗎?你的意思是你如何訪問web服務響應中的'data.d'? – 2013-03-18 18:11:28

+0

那麼我的數據讀取器從數據庫中輸出團隊名稱,但我需要訪問團隊的ID號碼,將它們添加到排名表 – JackofAll 2013-03-18 18:14:45

+0

是否有一個原因,你是通過類分配,而不是使用ID開始?它會暗示你有多個文本框你想綁定,但我只看到需要一個。如果是id導致的問題,因爲asp是添加到id的東西,使用ClientIDMode =「靜態」。 – Justin 2013-03-18 19:38:48

回答

0

既然你在使用一個Ajax請求的客戶端填充此,你將不得不採取:

  1. 通過寫入一個HTML輸入型=隱藏的元素和閱讀它獲取選中的值在表單發回時在服務器端。請不要忘記通過添加runat="server"
  2. 通過另一個Ajax請求提交選定的值,以使input type=hidden元素成爲服務器端控件。
  3. 使用Request.Params集合,使用列表框的名稱作爲鍵讀取選定的值。喜歡的東西:

    var selectedValues = Request.Params["select_box_name"]; 
    

你將不能夠簡單地使用ListBox.SelectedValue因爲數值不會在ViewState發現,因爲你是通過Ajax填充它。

我與選項3去...

0

希望的東西like這符合您的需求更好地