jQuery自动完成:根据所选复选框更改SQL查询

时间:2010-10-26 10:33:04

标签: asp.net jquery sql autocomplete ashx

想象我有一个文本框(带有自动完成1.1,而不是最新的UI版本)和一个复选框。 文本框触发一个asp.net .ashx页面,该页面将在sql-server上执行存储过程并返回结果。

一切正常,但我想添加其他功能。 选中该复选框后,我希望执行stored_procedure_1。 如果未选中该复选框,则必须执行stored_procedure_2。 默认情况下,该复选框未选中。

我的问题: 如果选中复选框,我如何告诉ashx页面? 默认情况下,自动完成将触发类似: autocompletedata.ashx?q = myname 并执行stored_procedure_2,但是当选中该复选框时,它必须触发autocompletedata.ashx?q=myname&mycheckbox=begin以便执行stored_procedure_1。

我是否必须添加一些jQuery代码才能通过选中的复选框? 我完全失去了..

提前致谢。

表单元素:

<input id="search_employee" type="text" class="employee" />
<input type="checkbox" name="mycheckbox" value="begin" />

jQuery的:

 $().ready(function() {

        $("#search_employee").autocomplete("includes/AutocompleteData.ashx", {
            minChars: 3,
            max: 15,
            selectFirst: false,
            scrollHeight: 300,
            formatItem: function(data, i, n, value) {
            if (value.split("_")[3]!== null)
            {
            return "<img style = 'width:40px;height:53px;float:left; margin:2px 5px 2px 0' src='/pictures/thumbs/"
            + value.split("_")[3] + "'/> " + value.split("_")[0] + "<br /><span class=smallname>" + value.split("_")[2] + "<br/>" + value.split("_")[4] + "</span>";
        } 
    },
            formatResult: function(data, value) {
                return value.split("_")[0];
            }
        });

autocompletedata.ashx的一部分:

Dim searchname As String = context.Request.QueryString("q")
Dim searchstart as string = context.Request.QueryString("mycheckbox")
Dim searchsql as string

if searchstart = "begin" then
   searchsql = "stored_procedure_1"
else
   searchsql = "stored_procedure_2"
end if

Dim conn As SqlConnection = New SqlConnection
conn.ConnectionString = ConfigurationManager.ConnectionStrings("MyConn").ConnectionString
Dim cmd As SqlCommand = New SqlCommand
cmd.CommandType = Data.CommandType.StoredProcedure
cmd.CommandText = searchsql.ToString
cmd.Parameters.AddWithValue("@SearchText", searchname)         

1 个答案:

答案 0 :(得分:1)

您可以使用 .setOptions 设置其他参数:

ac.setOptions({ params: { paramOne:'somevalue', somethingelse:'foobar' } });

这是编程方式,但在你的情况下:

$("#search_employee").autocomplete("includes/AutocompleteData.ashx", {
   params: { flag:'true' }, // just grab the checked attr beforehand
     ...//rest of your AC stuff

这将执行以下HTTP GET:

GET: includes/AutocompleteData.ashx?flag=true

允许您通过ASHX中的Request.QueryString集合访问它。

修改

我的坏 - 我在想另一个版本的AC。

我认为该参数被称为“extraParams”:

$("#search_employee").autocomplete("includes/AutocompleteData.ashx", {
   extraParams: { flag:'true' }

尝试两者,一个将/应该工作。 :)

HTH。