2012-03-19 155 views
1

我想通過從數據庫使用jQuery和c#的值來做自動完成。jQuery的UI自動完成與asp.net c#

這是我的HTML表單

<form action="Default.aspx" method="post"> 
    <fieldset> 
     <p class="ui-widget"> 
      <label for="state">State (abbreviation in separate field): 
      </label> 
      <input type="text" id="state" name="state" /> 
      <input readonly="readonly" type="text" id="abbrev" name="abbrev" maxlength="2" size="2"/> 
     </p> 
     <input type="hidden" id="state_id" name="state_id" /> 
     <p class="ui-widget"> 
      <label for="state_abbrev">State (replaced with abbreviation): 
      </label> 
      <input type="text" id="state_abbrev" name="state_abbrev" /> 
     </p> 
     <p> 
      <input type="submit" name="submit" value="Submit" /> 
     </p> 
    </fieldset> 
</form> 

和我的JQuery的文件是這樣的

$(function() { 
    $('#abbrev').val(""); 
    $("#state").autocomplete({ 
     source: "states.aspx", 
     minLength: 2, 
     select: function (event, ui) { 
      $('#state_id').val(ui.item.id); 
      $('#abbrev').val(ui.item.abbrev); 
     } 
    }); 
    $("#state_abbrev").autocomplete({ 
     source: "states_abbrev.aspx", 
     minLength: 2 
    }); 
}); 

cs文件是在這一行

這個

JavaScriptSerializer serializer; 
public class State { 
    public int id; 
    public string value; 
    public string abbrev; 
} 
protected void Page_Load(object sender, EventArgs e) { 
    serializer = new JavaScriptSerializer(); 
    Response.Write(JSONData(Request.QueryString["Term"])); 
} 
private string JSONData(string term) { 
    ArrayList stateArray = new ArrayList(); 
    int index = 0; 
    SqlConnection objConn = new SqlConnection("YOUR-CONNECTION-STRING-HERE"); 
    DataSet myds = new DataSet("States"); 
    objConn.Open(); 
    SqlDataAdapter adapter = new SqlDataAdapter("SELECT id, state, abbrev FROM states WHERE state like \'%\' + @ac_term + \'%\'", objConn); 
    adapter.SelectCommand.Parameters.Add("@ac_term", SqlDbType.VarChar); 
    adapter.SelectCommand.Parameters["@ac_term"].Value = term; 
    adapter.Fill(myds, "States"); 
    foreach (DataRow dr in myds.Tables[0].Rows) { 
     State st = new State(); 
     st.id = dr["id"].ToString(); 
     st.value = dr["state"].ToString(); 
     st.abbrev = dr["abbrev"].ToString(); 
     stateArray.Add(st); 
    } 
    objConn.Close(); 
    return serializer.Serialize(stateArray); 
} 

但仍IM剛開錯誤

adapter.Fill(myds, "States"); 

誰能幫我出這...

+2

什麼是錯誤? – 2012-03-19 17:40:53

+0

參數error..somethin LIK值爲空 – vani 2012-03-19 18:00:28

回答

0

在第一次看,好像\「%\」的問題 - 不要使用轉義字符 - 只是: SELECT ID,狀態,縮寫從各國WHERE狀態LIKE '%' + @ac_term + '%'

乾杯, 伊萬

+0

我試圖達也,但沒有得到 – vani 2012-03-19 18:09:29

+0

靜止影像剛開TIS異常的參數化查詢「(@ac_term VARCHAR(8000))SELECT regon_name FROM region_test WHERE」預計參數「@ac_term」,那是不供給的。 – vani 2012-03-20 04:17:35

0

嘗試佔據了NULL值:

SqlDataAdapter adapter = new SqlDataAdapter(@"SELECT id, state, abbrev FROM states WHERE @ac_term IS NULL OR state LIKE '%' + ISNULL(@ac_term,'') + '%'", objConn); 

(使用@消除逃逸字符)

+0

k我試試.... ....你可以嘗試塔碼n給我正確的整個代碼 – vani 2012-03-19 18:11:22

+0

不,我不能。我沒有你的環境來測試。這就是爲什麼我說「試試」:) – 2012-03-19 18:25:10

+0

參數化查詢'(@ac_term varchar(8000))SELECT regon_name FROM region_test WHERE'期望參數'@ac_term',它沒有提供。這是例外即時消息 – vani 2012-03-20 04:20:14

1

我相信這個問題是在這一行:

adapter.SelectCommand.Parameters["@ac_term"].Value = term; 

錯誤是告訴你,這個參數不具有值。您或者需要確保該術語等於某個值,或者更改存儲過程以不依賴此參數。

從你的代碼看來,你傳遞給JSONData函數的變量來自一個Querystring,你應該測試以確保這個字符串是你期望的那樣(也就是說NOT NULL或undefined,期待)。

一個簡單的方法來做到這一點是:

if (string.IsNullOrEmpty(term) || term == "undefined") return; 

這將導致該函數返回如果遇到空或未定義的查詢字符串。