关于asp.net的一些零碎想法

      这年头用asp.net的人越来越多 但是在很多人眼里 似乎这就是个“做网站“的 而”做网站“这个叫法又给人以一种十分简单的感觉 但事实上 如果一个人只把ASP.NET停留在做网站这个层面 那么这个人估计在asp.net技术上的发展将为极为有限

      很多asp.net的开发人员估计都会走两种极端 那就是 要么延续 java asp的开发模式 完全用HTML控件来代替ASP.NET服务器控件  似乎这样子就牛逼 而有人则是能拖控件就托控件 事实上我也是从这两个阶段过来 自从回了jquery之后对服务器控件几乎是到了非常不待见的程度 但是事实上 之前对于服务器控件的了解仅仅是点皮毛 而要真正用好服务器控件 包括用户控件 那真的不会比用jquery等等各种客户端脚本写AJAX难很多

      就比如最近项目中用到的 分页控件是用到了用户控件 而这些用户控件又都继承于自己写的一个BasePager<T>的泛型类 而这里最大的问题就是Page_Load的问题 在此之前对于Page_Load仅仅理解为主页面载入时候调用的一个方法 而当页面中有了用户控件等等之后 情况就会变得复杂了 用户控件的Page_Load在什么时候执行?通过跟踪代码以及对ASP.NET页面生命周期的理解我们知道 当请求一个页面的时候 该页面的Page_Load会首先执行(当然前面还有别的事件)  然后是其内部各个控件的Page_Load事件 在这儿还比较好理解 那当我们点击了某个服务器控件导致页面回发呢?比如Button1的Click事件,这个时候很多人会犯的一个想当然的错误就是先会去执行这个控件的Click事件 而事实上 该事件是在Page_load之后发生的 更为头疼的是 如果这个Click事件中需要为用户控件中的某个属性赋值 而这个所赋的值又将在用户控件(称为UC1吧)Page_Load的时候被调用 那么现在就回出现这种情况 用户控件的Page_Load在Button1的Click事件之前发生 结果就是我们所希望看到的结果没有出现 常见的情况就是我们要在点击Button1后 使UC1中的一个Label被赋值为通过Button1的Click而改变的一个值 这个时候Label是不会被正确赋值的 因为事实上当UC1发生Page_Load事件的时候 Button1的Click事件还没有发生

      那如何才能使我们能够正确赋值呢 其实这个时候我们就不应该在UC1的Page_Load中为Label赋值 而是在UC1里面为Label单独写他的Page_Load事件 因为UC1中的Labe的Page_Load是页面Button1的Click事件之后发生的

     但这里需要注意的是 如果是数据绑定控件 情况又不一样 这个时候我们就只能假的PostBack我们的页面 然后在最开始的Page_Load事件 即请求页面的Page_Load事件中写我们的赋值代码 此时就不能将该代码段写在IF(!ISPOSTBACK)中 原因我想大家都知道

     当然以上结论也只是自己跟踪代码得来 或许还是和正式的文档有出入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值