page类和回调技术(编辑修改稿)内容摘要:

记之外,不符合 XHTML标准。 这对于普通页面来说也许并无大碍,但是如果在频繁输出 javascript脚本的 网页中,可能会对网页的客户端执行效果产生影响。 因为 javascript脚本块在客户端调用方法之前还是客户端调用方法之后效果可能会不一样。 下面在 Home窗体的 Page_Load事件中添加代码,如下: 1. using System。 2. using。 3. using。 4. using。 5. using。 6. using。 7. using。 8. using。 9. using。 10. using。 11. 12. public partial class Home : 13. { 14. protected void Page_Load(object sender, EventArgs e) 15. { 16. if (!) 17. { 18. (script language=39。 javascript39。 alert(39。 + oString() + 39。 )/script)。 19. } 20. } 21. } 这样每次运行 ,如下图: 这不是我们所关心的,我们关注的是生成的 HTML代码,如下: 1. 2. 3. !DOCTYPE html PUBLIC //W3C//DTD XHTML Transitional//EN ht 4. 5. html xmlns= 6. headtitle 7. 无标题页 8. /title/head 9. body 10. form name=form1 method=post action= id=form1 11. div 12. input type=hidden name=__VIEWSTATE id=__VIEWSTATE value=/wEPDwUJNzgzNDMwNTMzZGTB6tgIyCoS2q3pZeKmhFwC24pQzw== / 13. /div 14. 15. div 16. 17. /div 18. /form 19. /body 20. /html 可以看见输出的 javascript代码在 html/html标记之外。 在 Page类中有一个 ClientScript属性,它是 ClientScriptManager的实例,这个类是在。 ClientScriptManager有如下几个常用方法: RegisterClientScriptBlock方法:向 Page 对象注册客户端脚本。 RegisterStartupScript方法:向 Page 对象注册启动脚本。 ClientScriptManager类通过键 string和 Type来唯一标识脚本。 具有相同类型的键和 Type的脚本识为同一 脚本。 下面对 Home窗体的 Page_Load事件中输入如下代码: 1. using System。 2. using。 3. using。 4. using。 5. using。 6. using。 7. using。 8. using。 9. using。 10. using。 11. 12. public partial class Home : 13. { 14. protected void Page_Load(object sender, EventArgs e) 15. { 16. 17. if (!((), ClientScriptBlock)) 18. { 19. ((), ClientScriptBlock, )。 20. } 21. 22. if (!((), StartupScript)) 23. { 24. ((), StartupScript, script language=39。 javascript39。 alert(39。 StartupScript39。 )/script)。 25. } 26. //(script language=39。 javascript39。 alert(39。 + String() + 39。 )/script)。 27. } 28. } 执行该页面时,会弹出两个提示窗口,生成的 HTML代码如下: 1. 2. !DOCTYPE html PUBLIC //W3C//DTD XHTML Transitional//EN ht 3. 4. html xmlns= 5. headtitle 6. 无标题页 7. /title/head 8. body 9. form name=form1 method=post action= id=form1 10. div 11. input type=hidden name=__VIEWSTATE id=__VIEWSTATE value=/wEPDwUJNzgzNDMwNTMzZGTB6tgIyCoS2q3pZeKmhFwC24pQzw== / 12. /div 13. 14. 15. div 16. /div 17. 18. /form 19. /body 20. /html 可以看出上面的两个方法输出的 javascript脚本都在 form/form标记之内,不会破环文章的结构,而且 RegisterClientScriptBlock方法输出的 javascript脚本代码块靠近 form标记的开始标记,而 RegisterStartupScript方法输出的 javascript脚本代码块靠近 form标记的结束标记,了解这一点对于控制动态添加的客户端脚本的时间是非常有利的。 回调技术 (CallBack) 在 默认都是整页面提交 ,此时客户端将当前页面表单中的数据(包括一些自动生成的隐藏域)都提交到服务器端,服务器重新实例化一个当前页面类的实例响应这个请求,然后将整个页面的内容重新发送到客户端,这种处理方式对运行结果没什么影响,不过这种方式加重了网络的数据传输负担、加大了服务器 的工作压力,并且用户还需要等待最终处理结果。 假如是我们希望有这么一个功能,当用户填写完用户名之后就检查服务器数据库里是否已存在该用户名,如果存在就给出已经存在此用户名的提示,如果不存在就提示用户此用户名可用,对于这种情况其实只需要传递一个用户名作为参数即可,上面的做法却需要提交整个表单,有点小题大做。 解决上面的问题的办法目前主流做法有三种:纯 javascript实现、微软 Ajax类库实现还有用 AjaxPro实现。 后两种做法在稍后的文章中会讲到,这里我讲另外一种实现:通过回调技术。 创建实现回调技术的网页与 普通 ,只不过还需要做以下特殊工作: (1)让当前页面实现 ICallbackEventHandler接口,这个接口定义了两个方法: string GetCallbackResult ()方法和 void RaiseCallbackEvent (string eventArgument)方法。 其中 GetCallbackResult ()方法的作用是返回以控件为目标的回调事件的结果, RaiseCallbackEvent()方法的作用是处理以控件为目标的回调事件。 (2)为当前页提供三个 javascript客。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。