注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

_

_

 
 
 

日志

 
 

关于Asp.net的FormView控件中,用FindControl方法找不到对应控件问题  

2014-11-20 23:50:33|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

关于Asp.net的FormView控件中,用FindControl方法找不到对应控件问题

在FormView控件的不同模版里,通过编辑模版,使用了多个控件。利用FormView的FindControl查找控件引用的时候,有时候出现找不到控件的情况。

原因:主要根FormView控件的运行机制有关。FormView的DefaultMode和CurrentMode属性决定其当前运行的模版是哪个,同时相应调用相关的sql语句和后台数据进行交互绑定。

如果状态为ReadOnly或Edit,而此时的查询语句没有检索到任何数据(对应查询结果的行),那么FormView没有任何东西可以显示,故里面的所有控件可以认为没有进行初始化。这时,用FindControl当然就找不到任何对应的控件的引用。? <我出错的原因就是select语句中的参数初始时没有赋值导致没有检索到任何数据>

有趣的一点是,如果当前为insert模式时,因为其不必调用对应的insert方法先期绑定数据,所以可以认为FormView始终初始化所有控件,这时的FindControl就不会出任何问题。

顺便提一点,FormView的不同模版里,控件可以使用同一个id。例如,在不同模版里都有一个id一样的TextBox,这是可以的。因为最终只会有一份模版进行实例化并显示。
这样可以带来一定好处:
1、代码比较好写(不用对应多个不同模版的不同id的同种控件写冗余代码);
2、ViewState(页面状态)可以平滑‘继承’(因为某些控件也许不需要数据绑定,这样FormView在不同模式下切换时,因为id一样,viewstate得以保留。当然,如果不同模版里的同一个id对应不同类型控件,结果可能就糟糕了,例如一个label和一个textbox的id一样。。。)

第二点有误,经过测试,ViewState在不同模式间切换后没有保留。应该是FormView在模式切换中有一个删除ViewState的过程。当然从效率角度上来讲也确实应该这样。

  评论这张
 
阅读(202)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017