2012-03-19 12 views
1

jqueryとc#を使用してデータベースから値を取ってオートコンプリートを実行しようとしています。jquery UIオートコンプリートwith 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); 
} 

が、このラインではまだイムのgettinエラーです

SELECT ID、状態、略称:ちょうど - エスケープ文字を使用しないでください -

は、誰もが初見で

+2

エラーは何ですか? –

+0

はパラメータ化されたエラーです...同様の値がnullでした – vani

答えて

0

...このうち私を助けることができる、\「%の\」問題があるように思えます国からの '%' のような状態+ @ac_term + '%'

乾杯、 イワン

+0

私も試しましたが、didtntを取得しました – vani

+0

まだgettin tis例外がありました。パラメータ '@ac_term varchar(8000)SELECT regon_name FROM region_test WHERE'は '@ac_term'それは供給されなかった。 – vani

0

は、NULL値を考慮してみWHERE:

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

(排除するために、@を使用して

+0

k try try tat ....あなたは正しいコード全体を私に送ってくださいね。 – vani

+0

いいえ、できません。私はあなたの環境をテストする必要はありません。だから私は "試してみた"と答えたのです:) –

+0

パラメータ化されたクエリ '(@ac_term varchar(8000))SELECT regon_name FROM region_test WHERE'は、パラメータ '@ac_term'が提供されていないと想定しています。 tis is exception gettin – vani

1

エスケープ文字は)私はこの問題は、この行であると信じて:

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

エラーは、このパラメータに値がないことを語っています。あなたは、用語が何かと等しいことを保証するか、このパラメータに依存しないようにストアドプロシージャを変更する必要があります。

コードからは、JSONData関数に渡す変数がクエリーストリングから来ているように見えます。この文字列が期待どおりであることをテストする必要があります(つまり、nullまたはundefinedなので、期待する)。

これを行う簡単な方法は、次のようになります。

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

これは、nullまたは未定義のクエリ文字列に遭遇した場合、関数が返すことになります。

関連する問題