簡體   English   中英

jQuery UI自動完成與asp.net C#

[英]jquery UI autocomplete with asp.net c#

我正在嘗試通過使用jquery和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);
}

但仍然在這一行中即時獲取錯誤

adapter.Fill(myds, "States");

誰能幫我這個忙...

我相信問題出在這一行:

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

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

從您的代碼看來,傳遞給JSONData函數的變量來自Querystring,您應該進行測試以確保此字符串符合您的期望(即,不是null或未定義,或者其他不期望的東西)。

一個簡單的方法是:

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

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

乍看之下,似乎是\\'%\\'的問題-不要使用轉義符-只是:SELECT id,state,abbrev FROM狀態在諸如'%'+ @ac_term +'%'之類的狀態

干杯,伊萬

嘗試考慮NULL值:

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

(使用@消除轉義字符)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM