ASP.NET动态创建控件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP.NET动态创建控件相关的知识,希望对你有一定的参考价值。

您好大神们,我是asp.net初学者,我在今天测试的时候有一个静态的控件.DropDownList1 我点击一个按钮,在按钮事件那里执行this.DropDownList1.Items.Add(new ListItem(Request.Form["text_input"])); 我在name=text_input的文本框输入一些内容 他就会自动加到dropDownList里面。再次点击输入另外一些内容,也会加进去,并且上一次加进去的内容还在。我想问的是,浏览器访问服务器,不是无连接的么?那么为什么上一次的内容还在呢???
然后我在另外一个按钮里面添加另外一个按钮事件,
CheckBox check;
if (!string.IsNullOrEmpty(Request.Form["text_input"]))

txt.Text = Request.Form["text_input"];
check = new CheckBox();
check.Text = Request.Form["text_input"];
this.span_vege.Controls.Add(check);

点击一次按钮添加一个checkBox,但是再次在文本框添加内容,点击按钮后,上一次添加的checkbox就不见了,这又是为什么呢??恳请大神们回答??

asp.net webform保持状态是通过 ViewState实现的,其实就是 在页面 中有个 id=“__ViewState"的Hidden, 在页面回传到服务器后,通过存在viewstate中数据可以还原控件的数据。
但是对于动态创建的 控件,这个viewstate没法存所以无法还原,
微软官方的方法是,在 Page_Init方法中,重新创建控件,只要Id和之前的一样的话在Page_Load的时候,控件的值就能还原回来。
如果要深入了解的话,需要弄懂webform页面生存周期内各个事件执行顺序,
不过我觉得webform的服务器控件有时候很麻烦,而且很容易误导人,建议少用,直接写原生的html吧,或者学习MVC框架。
参考技术A c#中控件也属于类,和其它类一样new就可以创建控件了动态创建控件是考虑到某些需求的原因比如要求控件显示的东西不一样,也许不显示等诸多原因都可能动态创建控件当然,以上说的这个情况还可以采用其它方式控制84比如HTML拼接字符串直接显示,控件毕竟是服务器的东西,需要编译,性能会降低86

在asp.net 中如何动态的创建表格?就是vs2008工具箱中的html table控件

动态创建是指可以创建用户指定行数列数的表格 请给出cs代码

文件1: Deafault.aspx
<%@ Page Language="C#"       CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
        <title>HtmlTable演示</title>
</head>
<body>
<h1>HtmlTable实例演示</h1>   
       <form id="Form1" runat="server">
          <table id="MyTable" cellpadding="5"       cellspacing="0" border="1"      runat="server" >
              <tbody>
              </tbody>
          </table><p>
          输入表格行数:
          <input type="text" id="MyTextOne" value="1"      runat="server"/></p>
          <p>输入表格单元格:
          <input type="text" id="MyTextTwo" value="1" runat="server" /></p>
          <p><input id="Submit1" type="submit" value="产生表格" runat="server" onserverclick="Submit1_ServerClick" /></p>
       </form>
</body>
</html>

文件2:Deafault.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page

        protected void Page_Load(object sender, EventArgs e)
        
        
        protected void Submit1_ServerClick(object sender, EventArgs e)
        
            int row = 0;
            int numrows = Convert.ToInt32(MyTextOne.Value);      // 获得文本框中整型数
            int numcells = Convert.ToInt32(MyTextTwo.Value);
            for (int j = 0; j < numrows; j++)
            
                HtmlTableRow r = new HtmlTableRow();
                if (row % 2 == 1)// 设置行的背景色
                    r.BgColor = "Gainsboro";
                row++;
                for (int i = 0; i < numcells; i++)
                
                    HtmlTableCell c = new HtmlTableCell(); //创建单元格对象
                    c.Controls.Add(new LiteralControl("行: " + (j + 1).ToString() + ", 单元格: " +(i + 1).ToString()));
                    r.Cells.Add(c); //添加该单元格对象
                
                MyTable.Rows.Add(r);//添加行对
            
            HtmlTableRow r2 = new HtmlTableRow();
            HtmlTableCell c2 = new HtmlTableCell();
            c2.Controls.Add(new LiteralControl("吉林大学远程教育学院"));
            c2.ColSpan = 3; //合并单元格,colspan属性可以实现单元格跨越多列
            r2.Cells.Add(c2);
            MyTable.Rows.Add(r2);
        

参考技术A <html>
<body>
<form runat="server">
<span>Table rows: </span><asp:TextBox ID="rows1" runat="server"></asp:TextBox>
<br />
<span>Table cells: </span><asp:TextBox ID="cells1" runat="server"></asp:TextBox>
<br/>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
<br/>
<table id="t1" border="1" runat="server" visible="false"/>
</form>
</body>
</html>

C# 代码(Button1的响应函数)

//Button1_Click
protected void Button1_Click(object sender, EventArgs e)

int numrows = Int32.Parse(this.rows1.Text);
int numcells = Int32.Parse(this.cells1.Text);
int row=0;

for(int j=0;j<numrows;j++)

HtmlTableRow r=new HtmlTableRow();
row=row+1;
for(int i=0;i<numcels;i++)

HtmlTableCell c =new HtmlTableCell();
c.Controls.Add(New LiteralControl("row "+j+", cell "+ i));
r.Cells.Add(c);

this.t1.Rows.Add(r);
this.t1.Visible=true;



本回答被提问者和网友采纳
参考技术B 下面是手动创的。自己要加行就用<tr></tr> 想加列就在<tr><td></td>><td></td>><td></td></tr>
我帮你给一个5行6列的表。。你用的时候想要多大就自己拉
<table>
<tr>
<td>1</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>

</tr>
<tr>
<td>2</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>

</tr>
<tr>
<td>3</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>

</tr>
<tr>
<td>4</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>

</tr>
<tr>
<td>5</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
不知道你要的是不是这样的。但手动创这样可以。如果 要加东西就在这里面自己加。要加行就用<tr></tr>l要加列就在<tr></tr>中加。不懂的再问
参考技术C 不用去直接拖table控件的,切换到 设计 页面,把光标移到你要插入表格的地方,在工具栏上,有“表(A)”,单击它,再单击“插入表”,就会弹出对话框,在此就可以设置表的行数,列数以及表的一些属性了。 参考技术D 请说具体一点,你想实现什么功能

以上是关于ASP.NET动态创建控件的主要内容,如果未能解决你的问题,请参考以下文章

在 Asp.net C# 中创建动态控件,并缓存控件并绑定数据

使用 ajax 动态创建 TABCONTAINER ASP.NET

如何找到动态创建按钮的容器 ASP.net

JQuery datepicker() 由 ASP.net 中的 CSS 类动态创建 TemplateFields

在asp.net 中如何动态的创建表格?就是vs2008工具箱中的html table控件

ASP.NET用户自定义控件