问题描述
前台代码<asp:SqlDataSourceID="SqlDataSource1"runat="server"ConnectionString="<%$ConnectionStrings:KnowledgeConnectionString%>"SelectCommand="SELECTBitOrder,NameFROMKB.AreaorderbyBitOrder"></asp:SqlDataSource><asp:CheckBoxListID="AreaList"runat="server"RepeatDirection="Horizontal"AppendDataBoundItems="True"DataSourceID="SqlDataSource1"DataTextField="Name"DataValueField="BitOrder"></asp:CheckBoxList>
后台代码protectedvoidPage_Load(objectsender,EventArgse){if(!IsPostBack){LoadNodeInformation();//加载节点信息}}protectedvoidLoadNodeInformation(){for(inti=0;i<AreaList.Items.Count;i++){//业务逻辑}}protectedvoidSaveButton_Click(objectsender,EventArgse){inti=AreaList.Items.Count;}
问题来了,LoadNodeInformation方法里面的AreaList.Item.Count的指为0,但是在SaveButton_Click方法里面AreaList.Item.Count的指是非0的,请教达人,这个是什么问题,难道是调用LoadNodeInformation方法时AreaList还没有动态加载?
解决方案
解决方案二:
不是很明白。。这个AreaList多选页面加载时默认有没选择的?SaveButton_Click点击时是不是已经选择了?
解决方案三:
if(!IsPostBack){}把这个去掉试试
解决方案四:
点击SaveButton时,触发SaveButton_Click事件,但之前肯定是要执行Page_Load()的。也就是每次页面加载时(注意:这个加载是指在服务器端每次为你动态重新构建一个新的页面时),Page_Load都会执行。当点击SaveButton时,进入Page_Load,这时IsPostBack为true,那么就会绕过LoadNodeInformation()方法。
解决方案五:
引用3楼namhyuk的回复:
点击SaveButton时,触发SaveButton_Click事件,但之前肯定是要执行Page_Load()的。也就是每次页面加载时(注意:这个加载是指在服务器端每次为你动态重新构建一个新的页面时),Page_Load都会执行。当点击SaveButton时,进入Page_Load,这时IsPostBack为true,那么就会绕过LoadNodeInformation()方法。
我是希望当页面第一次加载的时候LoadNodeInformation()方法就能够获取到AreaList.Item.Count的值这个有什么方法实现吗?to:drik尝试过你说的方法,页面在第一次加载同样是获取不到AreaList.Item.Count的值,只有第二次才能获取到
解决方案六:
if(!IsPostBack){LoadNodeInformation();//加载节点信息}第一次加载页行执行.以后怎么刷新也不会执行.所以你下边的值才会变..因为当刷新页面时.系统会自己动释放掉一些信息....所以每次执行操作都得重新绑定数据源.
解决方案七:
感觉第二次没绑定。呵呵。
解决方案八:
感谢各位,问题已经解决因为我的CheckBoxList是绑定SqlDataSource,当页面第一次加载的时候,CheckBoxList还没有绑定SqlDataSource解决办法,在Page_Load方法里面添加一个BindCheckBoxList()方法,用程序实现数据源绑定