【问题标题】:How to categorize product by it's types in Asp.net using Webforms如何使用 Webforms 在 Asp.net 中按产品类型对产品进行分类
【发布时间】:2020-10-27 13:28:33
【问题描述】:

我想使用下拉列表按产品类型对产品进行排序。

当我在下拉列表中选择产品时,按类型分类的产品不起作用。

ProductByType的存储过程:

Public List<Product> GetProductsByType(int typeId)
    {
        try
        {
            using (GarageDBEntities db = new GarageDBEntities())
            {
                //select * from table where condition is required type
                List<Product> products = (from x in db.Products
                                          where x.TypeId == typeId
                                          select x).ToList();
                return products;
            }
        }
        catch (Exception)
        {
            return null;
        }
    }

显示产品的索引页面代码:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Index : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        FillPage();
    }

    private void FillPage()
    {
        //Get a lsit of all products in DB
        ProductModel productModel = new ProductModel();
        List<Product> products = productModel.GetAllProducts();

        //Make sure products exists in the database
        if (products != null)
        {
            //Create a new Panel with an ImageButton and 2 labels for each Product
            foreach (Product product in products)
            {
                Panel productPanel = new Panel();
                ImageButton imageButton = new ImageButton();
                Label lblName = new Label();
                Label lblPrice = new Label();

                //Set childControls properties
                imageButton.ImageUrl = "~/Images/Products/" + product.Image;
                imageButton.CssClass = "productImage";
                imageButton.PostBackUrl = "~/Pages/Product.aspx?id=" + product.Id;

                lblName.Text = product.Name;
                lblName.CssClass = "productName";

                lblPrice.Text = "₹" + product.Price;
                lblPrice.CssClass = "productPrice";

                //Add child controls to Panel
                productPanel.Controls.Add(imageButton);
                productPanel.Controls.Add(new Literal { Text = "<br />" });
                productPanel.Controls.Add(lblName);
                productPanel.Controls.Add(new Literal { Text = "<br />" });
                productPanel.Controls.Add(lblPrice);

                //Add dynamic Panels to static Parent panel
                pnlProducts.Controls.Add(productPanel);
            }
        }
        else
        {
            //No products found
            pnlProducts.Controls.Add(new Literal { Text = "No Products Found!" });
        }
    }

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        ProductModel productModel = new ProductModel();
        List<Product> products = productModel.GetProductsByType(Convert.ToInt32(DropDownList1.SelectedItem.Value));

            foreach (Product product in products)
            {
                Panel productPanel = new Panel();
                ImageButton imageButton = new ImageButton();
                Label lblName = new Label();
                Label lblPrice = new Label();

                //Set childControls properties
                imageButton.ImageUrl = "~/Images/Products/" + product.Image;
                imageButton.CssClass = "productImage";
                imageButton.PostBackUrl = "~/Pages/Product.aspx?id=" + product.Id;

                lblName.Text = product.Name;
                lblName.CssClass = "productName";

                lblPrice.Text = "₹" + product.Price;
                lblPrice.CssClass = "productPrice";

                //Add child controls to Panel
                productPanel.Controls.Add(imageButton);
                productPanel.Controls.Add(new Literal { Text = "<br />" });
                productPanel.Controls.Add(lblName);
                productPanel.Controls.Add(new Literal { Text = "<br />" });
                productPanel.Controls.Add(lblPrice);

                //Add dynamic Panels to static Parent panel
                pnlProducts.Controls.Add(productPanel);
            }
    }
}

即使我选择产品类型,它也总是显示所有产品。 如图所示,我选择了“发动机油”,但它显示了所有产品。 我希望它仅显示下拉列表中所选产品类型的特定产品。

【问题讨论】:

  • 那个 catch 块对你没有任何好处。至少,记录你有一个错误!不要只是丢弃它。

标签: asp.net webforms dropdown web-site-project


【解决方案1】:

尝试在您的Page_Load 事件中添加PostBack 验证:

C# 代码:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        FillPage();
    }
}

最有可能的是,当在下拉列表中选择一个项目时,会生成一个回发,它将调用PageLoad 并重新加载所有产品,为避免这种情况,通常会设置回发验证

确保在&lt;asp:DropDownList /&gt; 控件中使用AutoPostBack="True" 标志

【讨论】:

  • 感谢@Julián 的回复。有效。我从过去 3 天开始很困扰,你解决了它。我很感激。
猜你喜欢
  • 2020-01-05
  • 1970-01-01
  • 1970-01-01
  • 2018-12-10
  • 2015-12-09
  • 2022-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多