当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 近期的几个ASP.NET开发经验总结和收集

ASP.NET
asp.net下用服务器端代码解决浏览器兼容性问题
asp.net 安全的截取指定长度的html或者ubb字符串
asp.net 在线编辑word文档 可保存到服务器
asp.net 提高网站速度及如何利用缓存
asp.net 修改/删除站内目录操作后Session丢失问题
asp.net URL重写简化版 速学URL重写
asp.net EncryptHelper 加密帮助类
asp.net JSONHelper JSON帮助类
C# 调用存储过程简单完整的实例代码
vs2008 安装失败的总结与分享
HttpHandler HttpModule入门篇
ASP.NET(AJAX+JSON)实现对象调用
Asp.net 基于Cookie简易的权限判断
asp.net通过HttpModule自动在Url地址上添加参数
asp.net 字符串、二进制、编码数组转换函数
ASP.NET操作Excel备忘录
记录游客页面访问IP的简易实现代码 (asp.net+txt)
比较简单的将数据信息导入wrod文档方案(C# for word)
增加asp.net应用程序性能的20种方法(简单有效)
ASP.NET 图片防盗链的实现原理分析

近期的几个ASP.NET开发经验总结和收集


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 98 ::
收藏到网摘: n/a

一:页面中Page_Load事件 和 Page.IsPostBack执行两次的原因.
原因一:
当<%@Page....中没有AutoEventWireup定义时会导致Page_Load执行两次,如果有定义,且值为true时,在IsPostBack中动态绑定控件等情况也会导致页面Load事件发生两次..因此,个人推荐不要忽视AutoEventWireup,且建议设置其值为 false;
原因二:
当页面中有<img src="">时,也可能会导致Page_Load执行两次,解决方法:我也唔知.

二:OnInit与OnLoad
个人理解:如果页面禁用了视图或者逻辑过程中没有用到视图或者没有必要回发数据的话,可以直接重写OnLoad方法,而不用再写OnInit方法,因为OnInit()之后还有进行一些视图方法的操作及回发数据的处理.因此直接OnLoad效率会高一些.

三:远程服务器返回500错误
过程中需要从远程服务器下载文件到本地.可一直报远程服务器返回500错误.检查来检查去,结果错误发生在本地:
原因:页面以ANSI编码保存,而本地完全路径中有中文字符,导致路径不能被程序有效识别.
解决方法:将页面编码更换成utf-8即可.VS系列中可通过高级保存选项更改.

四:Response.End,Response.Redirect等导致"正在中止线程"的问题
如果是Response.End(),可用HttpContext.Current.ApplicationInstance.CompleteRequest()来代替(据个人测试,貌似使用这句后,后边不能再有程序执行,否则仍然会继续执行下去?)
对于Response.Redirect()可用其重载方法:Response.Redirect(string,bool)
当然,Server.Execute(),Server.Transfer()情况也类似.

附上ASP.NET页面的生存周期(看明白了就知道为何有时只需要OnLoad,而不需要OnInit了)
____
一:初始化Init:初始化对象--Init事件(OnInit方法)
二:加载视图状态:LoadViewState方法
三:处理回发数据:LoadPostData方法---实际上这一步只是加载,并没有做其它的处理.
---实现该方法的控件要继承自IPostBackDataHandler接口,该接口有LoadPostData和RaisePostBackDataChangedEvent两个方法
四:加载Load:---Load事件(OnLoad方法)---该过程中所有对象都已经被实例化了..
五:发送回发更改通知:RaisePostBackDataChangedEvent方法
六:处理回发事件:IPostBackEventHandler接口的RaisePostBackEvent方法.
七:预呈现:OnPreRender方法(PreRender事件)
八:保存视图状态:SaveViewState方法
九:呈现:Render方法(--不再有对应事件)
十:处置,回收资源:Dispose方法
十一:卸载:UnLoad事件(OnUnLoad方法)..
---------Page是从Control继承的,因此它也是一种特殊的控件!