您现在的位置: 365建站网 > 365文章 > ASP.net从服务器端向客户端弹出alert对话框,但不使页面变成白板

ASP.net从服务器端向客户端弹出alert对话框,但不使页面变成白板

文章来源:365jz.com     点击数:1661    更新时间:2009-09-13 10:35   参与评论

在做ASP.net的项目时,碰到在页面上输入一些数据后,然后点击提交按钮,然后服务器端校验数据,如果数据不合格,用

Response.Write("<script>alert(' 用户名不存在!')</script>")

向客户端推出一个警告窗口提示,这时候会发现,显示警告窗口的时候,在警告窗口的背面页面是一片空白,非得你按了警告窗口上的确定按钮,主页面才会显示出需要的内容。

为什么会出现一个页面白板呢?包括服务器端向客户端推出的 showModalDialog 模态窗口一样,用 Response.Wrtie()输出到客户端页面,可以通过查看生成页面的源文件,就能发现是在页面的最前面加上了 alert() 或 showModalDialog() js函数,这种警告窗口或模态窗口弹出来之后,将会阻止页面显示接下来的内容,所以您看到的就是一片空白,只有用户关了警告或模态窗口才会继续显示页面内容。那么怎么才能让显示 alert对话框或 showModalDialog 窗口时,主页面有内容显示呢?很简单,需要让生成的 html 中 alert 和 showModalDialog 处在显示内容的后面。

下面这个做法是:用Page.RegisterStartupScript()方法注册页面执行脚本,它会把注册的脚本放在Web 窗体的结尾处,即</form>标记之前

Page.RegisterStartupScript("msg", "<script>alert('用户名Unmi不存在!')</script>");

也就是 form 的内容显示完之后才执行这一段脚本--弹出警告窗口,所以页面不会空白。如果这个 WebForm 几乎包含了页面所有显示内容,那么从语义上讲也可以说是在 document 加载完后弹出警告窗口。

由此我们也能想到,如果给页面加个 window.onload 事件的处理函数,在这个处理函数中弹出警告窗口,那么不管是放在前面还是后面都不会影响到页面的显示(不会出现白板现象),因为它总是等待document加载完成后才执行的,因此我们也可以这样写:

Response.Write("<script >function window.onload() {alert('用户名Unmi不存在!');}</script>"); //这里重写了 window 的 onload 函数。

另外:还有 RegisterClientScriptBlock 也可用来解决类似问题,在Page.RegisterClientScriptBlock和Page.RegisterStartupScript有何区别?一文中说,RegisterClientScriptBlock 一般返回的是客户端函数的包装,而 RegisterStartupScript 返回得函数在 document 装载完成后会执行,类似于我们平时所说的body onload="f()" 里面的函数;这两个方法在客户端呈现的代码位置不同,RegisterClientScriptBlock 在 <form runat=server> 之后,而 RegisterStartupScript 在 </form> 之前。

要更清楚的知道 RegisterClientScriptBlock 和 RegisterClientScriptBlock 有什么区别,只要观察一下生成的 HTML 源文件就知道了。


如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛

发表评论 (1661人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
昵称:
最新评论
------分隔线----------------------------

快速入口

· 365软件
· 杰创官网
· 建站工具
· 网站大全

其它栏目

· 建站教程
· 365学习

业务咨询

· 技术支持
· 服务时间:9:00-18:00
365建站网二维码

Powered by 365建站网 RSS地图 HTML地图

copyright © 2013-2024 版权所有 鄂ICP备17013400号