动态控件与静态控件的区别
这次,一改以前的C/S模式,做一个B/S的系统。那B/S模式到底是什么模式呢?
B/S模式分为服务器端和客户端,客户端接受用户的请求,客户端向应用服务器提出请求,应用服务器从数据库服务中获得数据,应用服务将数据进行计算并将结果提交给客户端,客户端将结果呈现给用户。这样,我们就看到了数据从客户到服务器,经过服务器处理再返回到客户端,有客户端软件(浏览器)显示结果。但如不经过处理,每次与服务器进 行交互,都需要刷新界面.这样,当数据从客户端发送到服务器再传送过来的过程 中,是否所有的数据都能被带回来呢?
看一个动态生成表格的例子.
先看一下效果图:
生成表格代码如下:
protected void Button1_Click(object sender, EventArgs e)
{
int intRows = 4; //行
int intColumns = 5; //列
//创建一个五行五列的表格,并给每一个表格添加text控件
for (int i = 0; i < intRows; i++)
{
TableRow tr = new TableRow();
for (int j = 0; j <= intColumns; j++)
{
TableCell tc = new TableCell();
//添加列头
if (i==0)
{
if (j==0)
{
tc.Text = "难度等级";
}
else
{
tc.Text = j.ToString();
}
}
else
{
if (j == 0)
{
switch (i)
{
case 1:
tc.Text = "选择题";
break;
case 2:
tc.Text = "判断题";
break;
case 3:
tc.Text = "填空题";
break;
}
}
else
{
TextBox txtValue = new TextBox();
txtValue.ID = "txt"+i.ToString() + j.ToString();
txtValue.Text = "0";
tc.Controls.Add(txtValue);
}
}
tc.HorizontalAlign = HorizontalAlign.Center;
tr.Cells.Add(tc);
}
tbAuto.Rows.Add(tr);
}
Label1.Text = Convert.ToString(DateTime.Now);
}
可是,当我们再次触发另一个事件与服务器进行交互时,表格就消失了.而如果是静态的控件,不管是不是再次刷新,控件都不会消失.如
这到底是怎么回事呢?动态建的表格是当我们点击按钮时,向服务器发送创建表格的命令,并将其返回给客户端显示.可是,当我们触发另一事件时,由于我们要与服务器进行交互,所以要重新刷新界面, 可是,在页面加载的服务器代码中并没有创建表格的代码要服务器执行,所以当然返回不了表格要客户端显示了.而页面上静态创建的控件,是在界面加载时,就创建的.有的时候,为了保存住页面刷新前的值,我们可以让静态控件只在页面第一次加载时,才建立,当页面再次加载时,则不再刷新这些控件.这样,就可以保存住页面加载前的值.而动态控件,我们可以通过让其局部刷新,即创建的动态控件不再刷新来使其在另一事件发生与服务器进行交互时,不至于消失.也可以保存住曾经控件中输入的值.