asp.net:将多个div添加到同一页面

时间:2013-12-27 15:56:25

标签: c# html asp.net css

我正在尝试创建某种论坛,并且每次单击按钮时都想添加一个新div(其中包含一些文本)。 (当我从数据库中获取所有内容时,这将在以后更改)所以这个想法是;单击按钮,出现div,再次单击该按钮,出现另一个div,位于最后一个div下方,无限重复。 我创造了1个div,但它不会再做了。这是我的代码:

protected void Button1_Click(object sender, EventArgs e)
{
    i += 1;
    top += 60;
    try
    {
        Panel div = new Panel();
        div.ID = "panel" + i;
        div.CssClass = "postdiv";
        div.Style["position"] = "absolute";
        div.Style["top"] = top.ToString();
        form1.Controls.Add(div);
    }
    catch (Exception er)
    {
        Console.Write(er);
    }
}

我认为我的问题在于div.Style [“top”] = top.ToString();但我不确定。有人知道解决方案吗?

3 个答案:

答案 0 :(得分:2)

问题是每次单击按钮时itop值始终为0,因此您需要使用ViewState或HiddenFields来保持回发之间的值。

每次发生回发时,您还需要在Page_Load中重新创建动态创建的div。

以下是我使用ViewState所做的事情:

private int Counter
{
   get
   {
      if (ViewState["Counter"] == null)
      {
         return 0;
      }
      else
      {
         return (int)ViewState["Counter"];
      }
   }
   set
   {
      ViewState["Counter"] = value;
   }
}

protected void Page_Load(object sender, EventArgs e)
{
    if (this.IsPostBack)
    {
        if (this.Counter > 0)
        {
            for (int i = 0; i < this.Counter; i++)
            {
                Panel div = new Panel();
                div.ID = string.Format("panel{0}", i + 1);
                div.CssClass = "postdiv";
                div.Style["position"] = "absolute";
                div.Style["top"] = string.Format("{0}px", (60 * (i + 1)));
                form1.Controls.Add(div);
            }
        }
    }
}

protected void Button1_Click(object sender, EventArgs e)
{
    this.Counter += 1;

    try
    {
        Panel div = new Panel();
        div.ID = string.Format("panel{0}", this.Counter);
        div.CssClass = "postdiv";
        div.Style["position"] = "absolute";
        div.Style["top"] = string.Format("{0}px", (60 * this.Counter));
        form1.Controls.Add(div);
    }
    catch (Exception er)
    {
        Console.Write(er);
    }
}

答案 1 :(得分:2)

分配顶级样式时请添加“px”:

   div.Style["top"] = top.ToString() + "px";

答案 2 :(得分:1)

您需要考虑到每次浏览器往返服务器(无论是第一次还是后续时间 - 回发)时,都需要从头开始重新创建页面的对象模型。

您在后面的代码中创建的变量,控件或对象都不会在回发中存在。

因此,您需要添加执行后面代码的控件每个时间。这就是为什么你需要一种像@ekad所提供的方法的原因。您的控件生成例程需要在循环内。