LiteralControls加倍加载

时间:2012-03-11 05:11:03

标签: c#

在以下代码中

protected void Page_Load(object sender, EventArgs e)
{
List<string> listSetValues = Class1.categories();

foreach (string strTemp in listSetValues)
{
    DIV1.Controls.Add(new LiteralControl("<li>" + strTemp + "</li>"));
}
}

和类代码是

protected static List<string> listSetValues = new List<string>();
public static List<string> categories()
{
    cmd = new SqlCommand("SELECT * FROM category", con);
    con.Open();
    SqlDataReader dr = cmd.ExecuteReader();
    while (dr.Read())
    {
        listSetValues.Add(dr[0].ToString());
    }
    con.Close();
    return listSetValues;
}

数据库表类别包含

Mobiles
DVD players
Cameras
Laptops
Televisions

在加载页面时,以上所有内容都显示在我的网站上,但在重新加载时,上面的五个值会显示两次,每次重新加载时,5个值的值都会不断增加。

2 个答案:

答案 0 :(得分:1)

为此,您必须在每次加载时初始化List .......

List<string> listSetValues =new List<string>();
listSetValues = Class1.categories();

foreach (string strTemp in listSetValues)
{
  categories.Controls.Add(new LiteralControl("<li>" + strTemp + "</li>"));
}

在方法代码中,

public static List<string> categories()
{
    List<string> listSetValues = new List<string>();
    cmd = new SqlCommand("SELECT * FROM category", con);
    con.Open();
    SqlDataReader dr = cmd.ExecuteReader();
    while (dr.Read())
   {
      listSetValues.Add(dr[0].ToString());
   }
   con.Close();
   return listSetValues;
}

答案 1 :(得分:0)

问题是每次回发到服务器时,都会将相同的项添加到列表中并将控件绑定到数据。

要避免这种情况,您必须在Page_Load方法中

调用加载数据方法,如

 if(!IsPostBack)
 {
     LoadData();
 }

这样做只会绑定您的列表一次,即第一次加载页面时不会绑定到服务器的其他回发。

希望这有帮助。