过滤与其类别相关联的产品C#ASP.NET

时间:2018-02-26 09:21:31

标签: c# asp.net datalist

Picture Click here

如果类别链接是导航,如何按照与其关联的类别搜索产品。

  1. 我创建了一个Category table = category_id,product_category
  2. 我也在products表中添加了product_category。
  3. 我可以通过管理面板添加类别,如果您查看我附上的屏幕截图,则会完美显示。
  4. 但是,当我点击某些类别时,它没有显示与该类别相关的产品,显示所有产品。

    例如,如果我点击Starters,那么starters产品将不会显示所有产品。

    我正在使用datalist来展示产品。我一直试图从2晚以来对此进行梳理并进行了大量研究,但找不到我需要的具体内容。

    你可以帮我解决这个问题吗?

    我在我的产品页面中使用此编码,但它无效

        con.Open();
            SqlCommand cmd = con.CreateCommand();
            cmd.CommandType = CommandType.Text;
             if (Request.QueryString["category"] ==null)
    
            {
    
                cmd.CommandText = "select * from Products";
    
            }
            else
            {
                cmd.CommandText = "select * from Products where product_category='" + Request.QueryString["category"].ToString() + "'";
            }
    
            cmd.CommandText = "select * from Products";
            cmd.ExecuteNonQuery();
            DataTable dtt = new DataTable();
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(dtt);
    
            DataList1.DataBind();
    
            con.Close();
    

3 个答案:

答案 0 :(得分:1)

你有3个问题:

  1. 您没有使用SqlParameters(Exploits of a Mom)。
  2. 在else阻止后重置sql查询。这将返回所有未经过滤的项目 - 每次。
  3. 您不会将数据列表绑定到数据表。 (也许你把数据源设置在其他地方,但是我们看不到它。我只是列出这个很好的措施)
  4. cmd.CommandText = "select * from Products";阻止后移除else。 并设置数据源:

    if (Request.QueryString["category"] ==null)
    {
         cmd.CommandText = "select * from Products";
    }
    else
    {
         //use parameters to prevent SQL injection
         cmd.CommandText = "select * from Products where product_category=@category";
         cmd.Parameters.Add(new SqlParameter("category", Request.QueryString["category"]));
    }
    //cmd.CommandText = "select * from Products";<--- delete this line
    /*.. exeute quesry and load into datatable */
    //bind datalist:
    DataList1.DataSource = dtt;
    DataList1.DataBind();
    

答案 1 :(得分:1)

我自己对此进行了整理。只是为了帮助,这是我的代码,它适用于我。

           //This is for displaying PRODUCTS.
            #region
            con.Open();
            SqlCommand cmdp = con.CreateCommand();
            cmdp.CommandType = CommandType.Text;

            var categoryID = Request.QueryString["category"];
            int catId = string.IsNullOrEmpty(categoryID) ? 0 : int.Parse(categoryID);
            if (!string.IsNullOrEmpty(categoryID))
                cmdp.CommandText = " select * from products where [category_id] = " + catId;
            else
                cmdp.CommandText = "select * from products";
            cmdp.ExecuteNonQuery();
            DataTable dttp = new DataTable();
            SqlDataAdapter dap = new SqlDataAdapter(cmdp);
            dap.Fill(dttp);
            Datalist1.DataSource = dttp;
            Datalist1.DataBind();

            con.Close();
            #endregion

答案 2 :(得分:0)

在if语句之后,您仍然设置命令文本以选择所有产品,因此请注释cmd.CommandText =“select * from Products”;在if语句之后再试一次