当前位置:文档之家› 精通ASPNET中弹出窗口技术

精通ASPNET中弹出窗口技术

精通ASPNET中弹出窗口技术
精通ASPNET中弹出窗口技术

摘要:本文讨论如何以https://www.doczj.com/doc/7117890923.html,中的CodeBehind方式实现各种弹出窗口,实现与弹出窗口的交互。并探讨常用非标准IE浏览器对弹出的窗口的各种过滤行为及使用弹出窗口相应对策,以期给出使用弹出窗口的一个通用较优方案。

关键词:https://www.doczj.com/doc/7117890923.html,、CodeBehind、过滤、COM接口、JavaScript、绑定

作为Microsoft的最新建立动态Web网站的工具,https://www.doczj.com/doc/7117890923.html,相对于ASP和JSP在改变原始的Web编程方式方面有了长足的长进。它的代码与页面分离技术(CodeBehind)以及完善的Web服务器控件为程序员提供了一个更加符合传统编程的Web服务器端开发方式。但Web编程还是有着与传统编程不相同的特点,这些特点决定了https://www.doczj.com/doc/7117890923.html,编程中必须以一些特殊的技巧来完成程序要求,弹出窗口正是这类编程方式的代表。相当多的编程书籍对弹出窗口采取缄默或者一语带过,似乎看不过弹出窗口的巨大使用天地。本文将为你解开弹出窗口使用中的大多数问题。

为了提高网站的访问的并发度和吞吐量,与其它服务器脚本一样,https://www.doczj.com/doc/7117890923.html,同样使用了客户端脚本来减轻服务器的压力。https://www.doczj.com/doc/7117890923.html,到现在(1.1版)为止并不直接支持弹出窗口,必须通过JavaScript(或VBScript)来使用客户端弹出窗口。

一、警告窗口与在CodeBehind中使用客户端脚本的方式

要在浏览器中弹出一个最简单的警告窗口,可以使用JavaScript语句:

window.alert([sMessage])

其中,sMessage是提示信息。可惜,这样的弹出窗口是只有一个“确定”按钮,只能起到提示作用。如果我们要在删除记录时候弹出一个询问的弹出窗口,此时你需要使用:

bConfirmed=window.confirm([sMessage])

其中:bConfirmed是返回值,sMessage是提示信息。这个弹出窗口有两种选择:“确定”或“放弃”,其选择的返回值放在bConfirmed中,可供代码作出判断。

为了提高代码的可重用性与可读性,应当使JavaScript与Codehind相互溶合。通常有两种方式可以达到这样的效果。

(1)使用Response.Write方法:

使用Response.Write方法早在ASP时代就已经被支持了。它可以把代码写到客户端,是一种相当方便且直观的方法。以下代码演示了如何使用Response.Write方法来显示一个警告信息。

PrivateSubbtAlert_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handles btAlert.Click

?演示Response.Write方法和alert窗口。

Response.Write("")

EndSub

(2)使用RegisterXXX方法

如果你观察Response.Write的生成HTML代码,你会发现Response.Write方法生成的代码是写到了HTML代码的最开始,即标签之前。此时,所有的HTML对象都还没有生成,如果要想使用HTML内的对象,并与之交互,就会出现“找不到对象”的错误。因此,笔者推荐一个更加符合CodeBehind方式的方式----使用RegisterXXX方法。RegisterXXX包括:RegisterClientScriptBlock、RegisterStartupScript以及用于判断的IsStartupScriptRegistered 函数。

RegisterStartupScript的原型是:

OverridablePublicSubRegisterStartupScript(_

ByValkeyAsString,_

ByValscriptAsString_

)

其中:key表示这个脚本的唯一标识,script是代表脚本的字符串。

RegisterClientScriptBlock的原型与RegisterStartupScript相同,两个函数不同在于将其包含的脚本代码写入到HTML文件的不同位置。RegisterClientScriptBlock在Page对象的元素的开始标记后立即发出客户端脚本,RegisterStartupScript则是在Page对象的元素的结束标记之前发出该脚本。如果你的脚本有与页面对象(doucument对象)进行交互的语句(这在我们后面的例子中看到),则推荐使用RegisterStartupScript,反之如果要想客户端脚本尽可能早的执行,则可以使用RegisterClientScriptBlock或Response.Write。

为了防止在页面中反复加入脚本,在注册脚本时

ReisterStartupScript/RegisterClientScriptBlock使用了key作为注册的Key,然后在程序中可以使用IsClientScriptBlockRegistered作判断。

以下例子将使用RegisterClientScriptBlock来演示confirm的使用方法。

PrivateSubbtConfirm_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Hand lesbtConfirm.Click

?演示RegisterClientScriptBlock方法和confirm窗口

If(NotIsClientScriptBlockRegistered("clientScript"))Then

…判断是否已经加入了该脚本,没有则加入。

DimstrScriptAsString

strScript=""

…注册脚本

RegisterClientScriptBlock("clientScript",strScript)

…如果选择”否”,则继续向下执行。

EndIf

EndSub

二、弹出指定页面

光有提示窗口还远远不能满足我们的要求,在程序中,我们常常需要弹出指定页面。此时可以使用JavaScript的window.open方法。配合前面的RegisterClientSciptBlock方法,我们就可以实现指定页面的弹出。

以下代码展示了如何弹出指定页面:

PrivateSubbtWinOpen_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Han dlesbtWinOpen.Click

?使用window.open与registerStartupScript简单演示。

If(NotIsClientScriptBlockRegistered("OpenScript"))Then

?判断是否已经加入了该脚本,没有则加入。

DimstrScriptAsString=""

RegisterStartupScript("OpenScript",strScript)

EndIf

EndSub

程序使用Window.open方法来弹出新的页面,它只一个参数:新的弹出窗口的URL地址。事实在window.open方法有多个参数,但这是javascipt的简单内容,我们将不会在这儿详细分说。如果你有相关的问题,请查询MSDN。

这段程序在IE中直接使用一切正常。但如果你正在使用类如GoSurf、MyIE2、NetCapter

之类的浏览器,那么,很不幸!你将看不到弹出窗口。这就是我们将要讨论的弹出窗口过滤问题。

三、非标准IE浏览器对弹出窗口的过滤行为讨论

广告窗口的泛滥使得不少网民不堪铺天盖地的广告骚扰纷纷放弃标准IE浏览器而使用诸如GoSurf、MyIE2、NetCapter这样的使用IE内核支持多页面并能自动屏蔽广告的软件。据说在即将发布的IE6sp2中微软也将加入封杀广告窗口功能。这对大多数网民当然是件好事,可对于程序员而言,我们使用弹出窗口的方式与一般广告并无本质的不同,这样的窗口也会

被弹出窗口管理器不分青红皂白的封杀,其结果当然是我们不愿看到的。有没有一个标准的方式能让窗口正常的弹出呢?这就要求我们了解浏览器封杀广告的原理。通常的广告封杀器使用以下三种方式进行广告过滤:

(1)、基于窗口标题的封杀方式

这种封杀方式的原理是定时检查所有的IE窗口标题,然后于已经有的列表(由程序维护的一个数组列表)来比较,如果有相同的,我们就关闭这个窗口。显然,这种方式有着诸多缺陷,它封杀了所有的弹出的窗口,管得太死,在程序真正使用的很少。不过,依据它进行的变形方式倒使用得相当的普遍。那就是,基于窗口标题名称的智能过滤技术,它根据弹出窗口的标题是否含有关于广告的关键字进行封杀,这为提高过滤效果作出了很好的探索。

(2)、基于窗口类和位置的封杀方式

经过分析发现正常浏览窗口的类名是IEFRAME和CabinetWClass,而广告窗口的类名是CabinetWClass。进一步分析发现:广告窗口的WorkerA类和ShellDocObjectView类的rect.top的值是相同的,正常IE窗口的WorkerA类和ShellDocObjectView类的rect.top的值是不相同的。根据以上两点就可以书写广告杀手程序了。事实上,我对此程序的通用性持怀疑态度。因为笔者用Spy++分析发现,在Windows2000(笔者使用的操作系统)中,IE窗口的类都为IEFrame。同时,由于Win2000是一个基于Unicode代码的操作系统,所以没有WorkerA类,而以WorkerW类取而代之。同时,也不存在rect.top不相同的情况,由于笔者没有WindowsXP操作系统,所以不能针对WindowsXP作进一步的试验。

(3)、基于IECOM组件的封杀方式

以上两种方式都是把IE窗口当作一个普通的Windows窗口对待,进行判断的。事实上,IE 是一个典型的基于COM组件的浏览器,所有的基于IE内核的浏览器都是包装shdocvw.dll 文件,然后书写相应的BHO代码。只有这样才能做到真正的控制IE浏览器,而不是方法一、二这样的隔靴搔痒。

还有一种基于IE内核的弹出窗口封杀方法。它可以在弹出窗口打开之前加以拦截。其原理是:每当IE打开一个新的窗口时候都会触发NewWindow事件,执行OnNewWindow2([out]IDispatch*,[out]BOOL*bCancel)方法。重载此方法,判断打开新窗口事件是否发生在浏览页面已经下载完毕之后。如果是,说明是正常的弹出窗口,反之加以拦截。

由于Gosurf这样的浏览器本身就重载了Shocvm.dll组件,所以使用第三种方法就自然成了顺理成章的事。然而在使用过程中有时也会发现,广告过滤不很完美,但原理基本如此。

aspnet课程设计报告

重庆科技学院 《https://www.doczj.com/doc/7117890923.html,动态网站设计》 课程设计报告 学院:_电气与信息工程学院_ 专业班级:计科2012-02 学生姓名:学号: 设计地点(单位)__ _ 计算机基础自主学习中心 __ _ 设计题目:_ 图书信息管理系统设计_______ 完成日期:2014年 6 月 27 日 指导教师评语: ______________________ _________________ _______________________________________________________________________ _______________________________________________________________________ _________________________________________________________ __________ _ 成绩(五级记分制):______ __________ 指导教师(签字):________ ________

重庆科技学院 课程设计任务书设计题目:图书信息管理系统 学生姓名 课程名称动态网页设计 —https://www.doczj.com/doc/7117890923.html, 专业班级 计科2012—02 地点实验楼I栋:I301等起止时间2014 年6月 23 日至 2014年 6 月 28日 设计内容及要求1、设计内容: 为方便学院对图书进行管理,模拟实现一个图书信息管理系统,该系统需提供以下功能: 1)注册 2)登录 3)用户管理 4)管理员在页面添加删除图书 5)其他用户进入图书馆简介 2、解决方法: 1)需求分析,建立该系统的功能模块框图以及界面的组织和设计; (2)分析系统中的各个实体及它们之间的关系; (3)根据问题描述,设计系统的类层次; (4)完成类层次中各个类的描述; (5)完成类中各个成员函数的定义; (6)完成系统的应用模块; (7)功能调试; (8)完成系统总结报告。 设计参数(1)设计题目,需求分析(2)结果显示 (3)界面美观 (4)报告格式规范 进度要求周一:明确设计任务,学习相关基础知识周二:熟悉各知识点,进行基础练习 周三:根据题目要求,进行设计和实现周四:根据题目要求,进行设计和实现周五:程序测试

aspnet课程设计任务书

《软件项目设计》课程设计任务书 计算机科学与技术专业 课程设计时间:2014.12.1~12.13 电气与信息工程学院2014年11月

Java程序设计课程设计任务书 一、课程设计目的 《软件项目设计》课程设计,属于集中实践教学环节,,是完成教学计划达到教学目标的重要环节,是教学计划中综合性较强的实践教学环节,它对帮助学生全面牢固地掌握课堂教学内容、培养学生的实践和实际动手能力、提高学生全面素质具有很重要的意义。《软件项目设计》是一门实用性和实践性都很强的课程,课程设计环节应占有更加重要的地位。本课程要求用https://www.doczj.com/doc/7117890923.html,/JAVA EE技术设计一个网站,提高综合应用所学知识的能力,积累开发Web应用程序的编程经验,提高编程与调试能力,团队协作能力,本课程设计应达到以下教学目的: 1、掌握使用https://www.doczj.com/doc/7117890923.html,/JAVA EE开发WEB应用程序所需的知识和技能 2、提高利用https://www.doczj.com/doc/7117890923.html,/JAVA EE开发WEB应用程序的能力; 3、加深学生对于数据信息及其网络管理利用的理解; 4、培养系统设计的整体思想、学习编写技术文档 5、提高学生的网站设计与开发能力; 6、使学生掌握利用软硬件资源发布一个具体网站的操作过程。 7、培养独立学习、吸取他人的经验、探讨技术的习惯,培养团队协作能力 二、课程设计任务及要求

本课程主要训练学生综合运用https://www.doczj.com/doc/7117890923.html,/java ee技术、数据库技术以及面向对象技术的知识,针对实际问题进行web应用程序的设计和实现,每个学生完成一个老师提供的课题或自选课题。 学生要发挥自主学习的能力,充分利用时间,安排好课程设计的时间计划,并在课程设计过程中不断检测自己的计划完成情况,及时向教师汇报。 供选择的课题(也可自选,但需征得指导教师同意。) 1、企业员工信息管理系统 2、学生成绩管理系统 3、餐饮经营管理系统 4、教学文档管理系统 5、计算机等级考试报名系统 6、在线计算机等级考试系统 7、网上图书销售系统 8、烟草销售管理系统 9、教师教学、科研工作量管理系统 10、校园音乐点播放系统 11、校园二手物品交易系统 ………

网页弹出对话框代码

【1、最基本的弹出窗口代码】 其实代码非常简单: 因为着是一段javascripts代码,所以它们应该放在之间。是对一些版本低的浏览器起作用,在这些老浏览器中不会将标签中的代码作为文本显示出来。要养成这个好习惯啊。 window.open ("page.html") 用于控制弹出新的窗口page.html,如果page.html不与主窗口在同一路径下,前面应写明路径,绝对路径(http://)和相对路径(../)均可。用单引号和双引号都可以,只是不要混用。这一段代码可以加入HTML的任意位置,和之间可以,间也可以,越前越早执行,尤其是页面代码长,又想使页面早点弹出就尽量往前放。 【2、经过设置后的弹出窗口】 下面再说一说弹出窗口的设置。只要再往上面的代码中加一点东西就可以了。 我们来定制这个弹出的窗口的外观,尺寸大小,弹出的位置以适应该页面的具体情况。 参数解释: