asp.net

位置:IT落伍者 >> asp.net >> 浏览文章

ASP.NET中弹出窗口技术浅析


发布日期:2020年12月04日
 
ASP.NET中弹出窗口技术浅析

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

为了提高网站的访问的并发度和吞吐量与其它服务器脚本一样ASPNET同样使用了客户端脚本来减轻服务器的压力那就是ASPNET中弹出窗口技术ASPNET到现在(版)为止并不直接支持弹出窗口必须通过JavaScript(或VBScript)来使用客户端弹出窗口

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

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

windowalert( [sMessage])

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

bConfirmed = nfirm( [sMessage])

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

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

) 使用ResponseWrite方法ASPNET中弹出窗口

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

Private Sub btAlert_Click(ByVal sender As SystemObject ByVal e As SystemEventArgs)

Handles btAlertClick 演示ResponseWrite方法和alert窗口

ResponseWrite( ) End Sub

) 使用RegisterXXX方法ASPNET中弹出窗口

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

RegisterStartupScript 的原型是

Overridable Public Sub RegisterStartupScript( _ ByVal key As String _ ByVal script As String _ )

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

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

为了防止在页面中反复加入脚本在注册脚本时ReisterStartupScript/RegisterClientScriptBlock使用了key作为注册的Key然后在程序中可以使用IsClientScriptBlockRegistered作判断

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

Private Sub btConfirm_Click(ByVal sender As SystemObject ByVal e As SystemEventArgs) Handles btConfirmClick 演示RegisterClientScriptBlock方法和confirm窗口

If (Not IsClientScriptBlockRegistered(clientScript)) Then

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

Dim strScript As String strScript =

注册脚本 RegisterClientScriptBlock(clientScript strScript)

如果选择则继续向下执行

End If End Sub

ASPNET中弹出窗口之弹出指定页面

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

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

Private Sub btWinOpen_Click(ByVal sender As SystemObject ByVal e As SystemEventArgs)

Handles btWinOpenClick使用windowopen与registerStartupScript简单演示

If (Not IsClientScriptBlockRegistered(OpenScript)) Then 判断是否已经加入了该脚本没有则加入

Dim strScript As String = RegisterStartupScript(OpenScript strScript)

End If End Sub

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

这段程序在IE中直接使用一切正常但如果你正在使用类如GoSurfMyIENetCapter之类的浏览器那么很不幸! 你将看不到弹出窗口这就是我们将要讨论的弹出窗口过滤问题

ASPNET中弹出窗口之非标准IE浏览器对弹出窗口的过滤行为讨论

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

ASPNET中弹出窗口相关的信息就介绍到这里希望对你有所帮助

               

上一篇:ASP.NET Routing对请求的处理方式

下一篇:ASP.NET中备份SQL Server数据库的方法