linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘网络学院网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > 开发语言 > ASP >
栏目导栏
  php
  JSP
  ASP
  asp.net
  JAVA
  c/c++/c#
  perl
  JavaScript
  Basic
  Delphi
资料搜索
热门文章
·由HTTP 500 Internal server e
·会员系统“找回密码”的制作方
·ASP实现数字和字母组合并生成图
·简单的asp验证码程序示例
·用ASP制作强大的搜索引擎
·如何让图片自动缩放以适合界面
·如何用foreach遍历页面上所有的
·如何实现站点的RSS输出
·无组件实现文件上传/下载
·ASP如何获取真实IP地址
·asp中如何使用 HTML 表格
·采用XMLHTTP编写一个天气预报的
·80004005错误及其解决方法
·asp中如何调试 ASP 脚本
·asp+ajax打造无刷新新闻评论系
最新文章
·ASP教程:8、ASP内建对象Respo
·ASP教程:7、ASP内建对象Reque
·ASP教程:6、ASP脚本循环语句
·ASP教程:5、ASP脚本变量、函数
·ASP教程:4、ASP脚本基础
·ASP教程:3、ASP基础
·ASP教程:2、ASP简介
·ASP教程:1、Are you ready?
·ASP中使用SQL语句教程
·ASP进度条
·由HTTP 500 Internal server e
·Asp无组件生成缩略图
·ASP 系列函数大全(4)
·ASP 系列函数大全(3)
·ASP 系列函数大全(2)
Google
 
ASP.NET动态创建控件之绝境求生
[ 作者:  加入时间:2007-11-30 13:30:25  来自:Linux联盟收集整理 ]
在ASP.NET中动态创建一个控件总是不那么顺利,特别是当对页面的Life Cycle不是那么了然的情况下!这里简单描述一下要求,然后提供一个解决方案,大家看看有没有更好的Idea,如果有的话就是我的大幸了,呵呵! h7vLinux联盟
   h7vLinux联盟
  要求:页面上有一个Add按钮,每点击一次该按钮,页面上动态创建一个WebPartZone! h7vLinux联盟
  提醒:WebPartZone只能在OnInit或之前才能创建,否则报异常! h7vLinux联盟
   h7vLinux联盟
  大家都知道,按钮的点击事件是在RaisePostbackEvent时触发的,这意味着点击事件在OnLoad阶段之后才执行,远远落后于OnInit阶段,而且ViewState在OnLoad时才准备好,OnInit以及之前的阶段根本就不能使用ViewState!如果试图在按钮点击事件里面创建WebPartZone等控件,唯一的后果就是页面出错;而如果在OnInit里面创建控件,由于ViewState没有准备好,那么有些数据比如当前需要创建的个数(存在ViewState里面)就无法获得! h7vLinux联盟
   h7vLinux联盟
  目前对这个问题我还没有找到什么好的解决方案,经过实验,勉强得出一个不怎么优雅的方案,就是利用HiddenField保存数据,然后直接使用Request.Form["XXX"]在OnInit阶段取得数据;而判断是否点击按钮也是通过Request.Form是否存在对应数据来判断的!废话不多说了,大家看看代码吧! h7vLinux联盟
   h7vLinux联盟
   h7vLinux联盟
   h7vLinux联盟
  <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> h7vLinux联盟
   h7vLinux联盟
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> h7vLinux联盟
  <html xmlns="http://www.w3.org/1999/xhtml"> h7vLinux联盟
  <head runat="server"> h7vLinux联盟
   <title>Untitled Page</title> h7vLinux联盟
  </head> h7vLinux联盟
  <body> h7vLinux联盟
   <form id="form1" runat="server"> h7vLinux联盟
   <asp:ScriptManager ID="ScriptManager1" runat="server" /> h7vLinux联盟
   <div> h7vLinux联盟
   <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder> h7vLinux联盟
   <br /> h7vLinux联盟
   <asp:Button ID="btnAdd" runat="server" Text="Add" OnClick="btnAdd_Click" />  h7vLinux联盟
   <asp:HiddenField ID="hfCount" runat="server" Value="0" /> h7vLinux联盟
   </div> h7vLinux联盟
   </form> h7vLinux联盟
  </body> h7vLinux联盟
  </html> h7vLinux联盟
   h7vLinux联盟
  using System; h7vLinux联盟
  using System.Data; h7vLinux联盟
  using System.Configuration; h7vLinux联盟
  using System.Web; h7vLinux联盟
  using System.Web.Security; h7vLinux联盟
  using System.Web.UI; h7vLinux联盟
  using System.Web.UI.WebControls; h7vLinux联盟
  using System.Web.UI.WebControls.WebParts; h7vLinux联盟
  using System.Web.UI.HtmlControls; h7vLinux联盟
   h7vLinux联盟
  public partial class _Default : System.Web.UI.Page h7vLinux联盟
  { h7vLinux联盟
   private int _count = 0; h7vLinux联盟
   h7vLinux联盟
   protected override void OnInit(EventArgs e) h7vLinux联盟
   { h7vLinux联盟
   base.OnInit(e); h7vLinux联盟
   h7vLinux联盟
   // 取得以前已创建控件的个数 h7vLinux联盟
   if (!String.IsNullOrEmpty(this.Request["hfCount"])) h7vLinux联盟
   { h7vLinux联盟
   _count = Convert.ToInt32(this.Request["hfCount"]); h7vLinux联盟
   } h7vLinux联盟
   h7vLinux联盟
   // 假如按下“Add”按钮,那么count加一 h7vLinux联盟
   string target = this.Request["btnAdd"]; h7vLinux联盟
   if (target == "Add") h7vLinux联盟
   { h7vLinux联盟
   _count++; h7vLinux联盟
   } h7vLinux联盟
   h7vLinux联盟
   // 动态创建控件 h7vLinux联盟
   for (int i = 0; i < _count; i++) h7vLinux联盟
   { // 这里以TextBox为例,实际上需要创建的是WebPartZone h7vLinux联盟
   TextBox newTextbox = new TextBox(); h7vLinux联盟
   newTextbox.ID = "TXT" + i.ToString(); h7vLinux联盟
   this.PlaceHolder1.Controls.Add(newTextbox); h7vLinux联盟
   } h7vLinux联盟
   } h7vLinux联盟
   h7vLinux联盟
   protected void Page_Load(object sender, EventArgs e) h7vLinux联盟
   { h7vLinux联盟
   hfCount.Value = _count.ToString(); h7vLinux联盟
   } h7vLinux联盟
   h7vLinux联盟
   protected void btnAdd_Click(object sender, EventArgs e) h7vLinux联盟
   { h7vLinux联盟
   // 不能在此添加WebPartZone控件,只能在OnInit或之前,否则报异常 h7vLinux联盟
   } h7vLinux联盟
  } h7vLinux联盟
  希望大家能提出更好的解决方案,我拭目以待,呵呵@_@ h7vLinux联盟
  http://www.cnblogs.com/leafyoung/archive/2007/04/04/699465.html Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·ASP.NET如何进行性能优化问题  (2007-11-30 13:29:43)
 ·Asp.net Ajax 1.0 异步回调时,服务器端Render原理  (2007-11-30 13:27:11)
 ·技巧/诀窍:在ASP.NET中重写URL  (2007-11-30 13:24:04)
 ·浅谈Asp.net 多层架构中的变量引用与传递  (2007-11-30 13:20:14)
 ·C#+ASP.NET 2.0 定制复合组件之高级篇  (2007-11-30 13:18:38)
 ·C#+ASP.NET 2.0 定制复合组件之基础篇  (2007-11-30 13:17:31)
 ·ASP.NET 2.0 中实现模板中的数据绑定  (2007-11-30 13:16:46)
 ·ASP.NET 2.0实现依赖Oracle的缓存策略  (2007-11-30 13:16:10)
 ·ASP.NET 2.0中使用HiddenField控件  (2007-11-28 13:44:53)
 ·ASP.NET 2.0 服务器控件之复合控件事件  (2007-11-27 17:33:02)