2012-03-19 159 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; 

这将导致该函数返回如果遇到空或未定义的查询字符串。