首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

关于动态生成网页控件的不解

2012-09-18 
关于动态生成网页控件的疑惑最近在设计一个可以动态生成网页的小程序,程序很简单,前台的页面如下:只有一个

关于动态生成网页控件的疑惑
最近在设计一个可以动态生成网页的小程序,程序很简单,前台的页面如下:
只有一个按钮和一个panel

HTML code
                  <div style="height:100px; background-color: #C0C0C0;">  测   试  </div>    <asp:Panel ID="Panel1" runat="server" Height="443px" >    </asp:Panel>    <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click"         style="height: 21px" />


后台的代码如下:

C# code
private void addC()         {            Label labelFirstRear = new Label();            labelFirstRear.ID = "labelFirstRear";            labelFirstRear.Text = "测试" + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;你好大的单子";            labelFirstRear.Attributes.Add("style", "font-weight:bloder;font-size:18px;color:#ffffff;");                                    HtmlGenericControl brFirstRear = new HtmlGenericControl();            brFirstRear.TagName = "br";            HtmlGenericControl divFirstRear = new HtmlGenericControl();            divFirstRear.TagName = "div";            divFirstRear.ID = "我的div" ;            divFirstRear.Attributes.Add("style", " background-color: red;");            divFirstRear.Controls.Add(labelFirstRear);            divFirstRear.Controls.Add(divFirstRear);            divFirstRear.Controls.Add(brFirstRear);            labelFirstRear.Text = "这段内容已经结束";            divFirstRear.Controls.Add(labelFirstRear);            divFirstRear.Controls.Add(brFirstRear);                        Panel1.Controls.Add(divFirstRear);                        }



我的问题是,现在这个程序能够基本上满足我的要求,但是还有几个小问题,
1,点击按钮后,程序根据我的要求可以进行显示,但是,不管我在divFirstRear这个里面增加多少个divFirstRear
查看代码的时候,仅仅只有两个br 的换行符。


2、像这样的结构,如果我想遍历里面的所有控件(如textbox)?肯定不能直接的用 foreach in panel会报错






[解决办法]
当页面执行完Render过程,也就销毁了,你所谓“动态增加”的控件也就跟着销毁了。下一次回发,并没有那些。

对于普通的asp.net页面而言(包括你在设计页面上声明的),它在页面的page_load事件过程结束之前,都是重建了的,也就是在控件树的同一结构的地方,具有与上一次Render输出html时相同的ID或者相同的次序的控件,这样asp.net才能为其填入ViewState值,并且随后触发其事件。

以前写过的一个demo。共有两个文件:

第一个:XXX.ascx
HTML code
<%@ Control Language="C#" ClassName="XXX" %><%@ Import Namespace="System.Drawing" %><%@ Implements Interface="IXXX" %><script runat="server">    public override void DataBind()    {        base.DataBind();        DropDownList1.DataBind();    }    public string Name    {        get        {            var nm = ViewState["name"];            return (string)nm ?? "无名氏";        }        set        {            if (Name != value)            {                ViewState["name"] = value;                EnsureChildControls();                pName.DataBind();            }        }    }    public event Action NameChanged;    public string MarkedValue    {        get        {            EnsureChildControls();            return this.DropDownList1.SelectedValue;        }    }    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)    {        switch (this.DropDownList1.SelectedValue)        {            case "标记:红":                this.div.ForeColor = Color.Red;                break;            case "标记:蓝":                this.div.ForeColor = Color.Blue;                break;            case "标记:黑":                this.div.ForeColor = Color.Black;                break;        }    }    protected void LinkButton1_Click(object sender, EventArgs e)    {        Name = pName.Text;        if (NameChanged != null)            NameChanged();    }    private List<string> GetDropdownList1Datas()    {        return new List<string> { "标记:黑", "标记:红", "标记:蓝" };    }</script><asp:TextBox runat="server" ID="pName" Text="<%# Name %>"></asp:TextBox>先生(女士):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<asp:LinkButton ID="LinkButton1" runat="server"    OnClick="LinkButton1_Click">修改名字</asp:LinkButton><asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"    DataSource="<%# GetDropdownList1Datas() %>" /><br /><asp:Panel runat="server" ID="div">    你的合同付款期限已到,未付款<asp:TextBox runat="server" ID="pMoney" Width="60px" />元人民币,请及时付款。    <br />    <br />    XXX年XXX月XXX日</asp:Panel> 

热点排行