来点入门级的:最近遇到的一些小问题及经验

由于很久没有接触.net(因为公司的技术在最近两年内估计仍会继续用VB6),这两天因为修改一个小程序,由于大意及经验不足,遇到一点小麻烦,郁闷了很久,担搁了不少时间,一点小经验,拿出来共享,希望大家别再范同样的错误.

为了提升性能,把页面上无需保存视图状态的控件的EnableViewState设为了false
其中包括一个Panel控件,后来在Panel上放了一个DropDownList控件,
虽然该控件的EnableViewState设置了True,但无论怎样,它不会触发SelectedIndexChanged事件
(解决这个问题,最后就是把该控件的父控件设置为保存视图状态)

由于整个Panel是放在一个DataList控件的SelectItemTemplate项中的,一直误以为是ItemCreated事件或者ItemDataBound事件中有问题
在ItemCreated和ItemDataBound事件的多次断点调试中,发现了以前没有注意到的一些细节:

1.在通过设置SelectedIndex =e.Item .ItemIndex 而显示SelectItemTemplate模板时,
 ItemCreated事件在提交的往返进程,以及最终显示时都会触发(最后查到MSDN中有说明),并且是每一行都会检查该事件过程.

2.存在e.Item.ItemIndex = -1的情况,所以ItemCreated事件需要加上两个判断条件(e.Item.ItemIndex >= 0 & e.Item .ItemType ==ListItemType.SelectedItem)

3.绑定控件事件,或都修改控件的属性(如:.AutoPostBack =true)等须在ItemCreated事件中进行,而不是ItemDataBound中

4.页面类中定义的私有变量,在页面回发后会重新初始化,如:private string strTemp="",如果在Page_Load中对strTemp赋了值,
 在DataList控件的SelectItemTemplate项的按钮提交后,ItemDataBound事件中取不到strTemp的值,它已被重新初始化.

原文地址:https://www.cnblogs.com/zyk/p/162191.html