在基于复选框的通用处理程序中更改用于自动填充的存储过程

Change stored procedure to be used for Autofill in a generic handler based on a checkbox

我有一个处理程序,用于根据输入文本框中写入的术语进行自动填充。我可以轻松获取术语并根据文本框中输入的内容实时执行我的存储过程。但我想根据输入文本框旁边的复选框执行不同的存储过程。主要问题是自动填充是从 IHttpHandler 中执行的,我似乎无法将带有存储过程名称的单个字符串从 Web 表单后端发送到 .ashx。

  1. 我尝试从 Web 表单后端发送存储过程的名称。
  2. 我尝试根据复选框是否被选中从 webform 后端发送任何数据,然后使用基于 if-else 语句中的字符串的存储过程(使用 Session 和 Redirect-Request)
  3. 我尝试使用 json 发送该数据并测试是否 =!空。
  4. 当我使用 Response.Redirect("FoodHandler.aspx?param=Search4") 单击复选框时,我被重定向到执行存储过程的页面,我只看到整个字符串数组。

我的 aspx 后端:

    public partial class SearchPageWithDynamicSQL : System.Web.UI.Page
       protected void Page_Load(object food, EventArgs a)
       {
        if(!IsPostBack)
        {
            checkbox2.Checked = false;
            checkboxhidden.Value = "Search3";

        }

     }
    public void Check_Clicked(object check, EventArgs c)
    {
         if (checkbox2.Checked)
           {
               StringA = "Search4";
               Session["param"] = "Search4";
           }
           else
           {
            StringA = "Search3";
            Session["param"] = "Search3";

             }
           checkboxhidden.Value = StringA;         
       }

我的经纪人:

        public class Handler1 : IHttpHandler
         {

      public string blarny { get; set;}
      public void ProcessRequest(HttpContext context) 
       {


        blarny = context.Session["param"].ToString();

        string term = context.Request["term"] ?? "";
        List<string> listFOODNAME = new List<string>();

        string cs = 
ConfigurationManager.ConnectionStrings["connectionStr"].ConnectionString;
        using(SqlConnection con = new SqlConnection(cs))
        {

            SqlCommand cmd = new SqlCommand(blarny, con);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add(new SqlParameter()
            {
                ParameterName = "@term",
                Value = term
            });
            con.Open();
            SqlDataReader rdr = cmd.ExecuteReader();
            while(rdr.Read())
            {
                listFOODNAME.Add(rdr["Long_Desc"].ToString());
            }
        }
        JavaScriptSerializer js = new JavaScriptSerializer();
        context.Response.Write(js.Serialize(listFOODNAME));

我的前端:

       <div class="col-xs-7">
                        <input type="text" runat="server" class="form-control"
                            id="inputLong_Desc" placeholder="Search for food" />
                    </div>
<div class="container" style="position:relative;top: 20px; left:60px" id="checkboxy">      
               <asp:HiddenField ID="checkboxhidden" runat="server"/>
               <asp:CheckBox id="checkbox2" runat="server" AutoPostBack="True" Text=" Search only basic foods." TextAlign="Right" OnCheckedChanged="Check_Clicked"/>
                       </div>

我希望我的自动填充能像这样工作: https://imgur.com/tZNvF14 我将能够通过复选框切换存储过程。 当我使用 SqlCommand cmd = new SqlCommand("Search4", con); 它工作正常。 预先感谢您的帮助!

我应该添加

   [WebMethod(EnableSession = true)]

在我的 aspx 文件中

    public class Handler1 : IHttpHandler, System.Web.SessionState.IRequiresSessionState 

在我的处理程序中,发送数据。