关于动态控件的事件响应和控件的生命周期的理解(应用)
来源:互联网 发布:linux vim 跳到指定行 编辑:程序博客网 时间:2024/06/06 03:00
平时我们在写程序时有时会动态的向指定页面添加控件,这些控件中回发过程中一般会从界面上消失,或者取不到状态值
实际上这些动态创建的控件的值是保存在ViewState中的,并且在页面回发的过程中也试图恢复这些值,但是由于没有在Page_Load结束之前重建这些状态所依附的控件(根据UniqueID来唯一确定这些控件,因此给动态控件设置主键十分重要),所以ASP.Net没有地方把状态放回控件
由于控件不会放入ViewStatus中,如果你在页面设计时放置一个控件,那么页面每一次实例化时会根据设计代码所编译的可执行代码,重新创建这个控件。如果你在页面运行时动态创建一个控件,就必须保证下一次页面PageLoad之前在自己的代码中重建这个控件(原因参见上一篇文章),因为PageLoad之后页面会立即给这个控件装载状态,所以你必须在PageLoad之前重新实例化这个控件
方法1:在PageLoad中处理
定义一个属性来标识控件是否修改,在OnClick事件中用一个ViewState来标识这个状态,将其设置为true.以标识视图状态修改。然后在Click中创建这个控件。在PageLoad中判断如果这个状态更改了,再重新建一次这个动态控件
public partial class _Default : System.Web.UI.Page
{
bool ShowCheckBox
{
get { return (ViewState["ShowCheckBox"] == null) ? false : (bool)ViewState["ShowCheckBox"]; }
set { ViewState["ShowCheckBox"] = value; }
}
protected void Page_Load(object sender, EventArgs e)
{
if (ShowCheckBox) //如果状态是修改的,再重新加载一次
{
SetControl();
}
}
protected void btn_Click(object sender, EventArgs e)
{
ViewState["ShowCheckBox"] =true; //标识一个状态来表明在视图状态中已修改
CheckBox chb = new CheckBox();
chb.ID = "Test";
chb.AutoPostBack = true;
//chb.CheckedChanged += new EventHandler(chb_CheckedChanged);这里写的委托没有用,因为回发后状态会修改.
this.form1.Controls.Add(chb);
}
void chb_CheckedChanged(object sender, EventArgs e)
{
btn.Text = "bbb";
}
private void SetControl()
{
CheckBox chb = new CheckBox();
chb.ID = "Test";
this.form1.Controls.Add(chb);
chb.CheckedChanged += new EventHandler(chb_CheckedChanged);
}
}
方法2(在PageLoad状态之前加载控件,通过重定LoadViewState方法实现,只是将Page_Load中的代码移动LoadViewState中
protected override void LoadViewState(object savedState)
{
base.LoadViewState(savedState);
if (ShowCheckBox)
{
CheckBox chb = new CheckBox();
chb.ID = "Test";
this.form1.Controls.Add(chb);
chb.CheckedChanged += new EventHandler(chb_CheckedChanged);
}
}
- 关于动态控件的事件响应和控件的生命周期的理解(应用)
- Android_关于子控件和父控件的事件响应问题
- Android_关于子控件和父控件的事件响应问题
- (4.4.14.1)Android_关于子控件和父控件的事件响应问题
- 动态添加的ActiveX控件如何响应事件
- 动态添加的ActiveX控件如何响应事件 .
- 动态添加的ActiveX控件如何响应事件
- 为动态生成的控件添加响应事件
- 【VS开发】动态添加的ActiveX控件如何响应事件
- 关于在自定义控件中事件不响应的问题
- 关于在自定义控件中事件不响应的问题
- 关于SQLDatasource控件的事件和参数
- 【Android】控件和基本事件响应的三种方式
- 【Android】控件和基本事件响应的三种方式
- GTK学习笔记1-简单的控件和事件响应
- 关于ViewState和动态控件的帖子
- 组合控件的鼠标事件响应
- 在dialog中控件的响应事件
- 自己整理的一些简单sql语句 供初学者复习
- asp.net 最简单的处理System.Data.OracleClient requires Oracle client software version 8.1.7 or greater
- 常用的JPA标记 hibernate annotation 参考
- strlen和sizeof的区别
- SCP 实现信任连接
- 关于动态控件的事件响应和控件的生命周期的理解(应用)
- 读书笔记之堆排序
- Qt使用正则表达式匹配中文GBK
- gushoyu 2010 12 03.17:02:56
- SQL Server语句优化详解
- 中小企业ERP系统选型四个标准分析
- GR/IR科目的月末调整
- MyGeneration + EasyObjects 构建系统开发中的业务实体与数据访问层
- 从零开始学习iphone开发课程