ASP.net从服务器端向客户端弹出alert对话框,但不使页面变成白板
2008-05-04 17:35
357 查看
在做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 源文件就知道了。
转自http://hi.baidu.com/weblong/blog/item/d89344c691c528189d163dce.html
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 源文件就知道了。
转自http://hi.baidu.com/weblong/blog/item/d89344c691c528189d163dce.html
相关文章推荐
- ASP.net从服务器端向客户端弹出alert对话框,但不使页面变成白板
- ASP.net从服务器端向客户端弹出alert对话框,但不使页面变成白板
- ASP.NET从服务端向客户端弹出alert("")对话框,但不使页面变成白板...
- 设置ASP.NET页面不被缓存(客户端/服务器端取消缓存方法)
- asp.net页面后退,重复弹出上一页对话框处理办法
- ASP.NET AJAX时用alert弹出对话框
- asp.net使用ajax后如何在客户端弹出提示对话框
- asp.net ajax 无法弹出alert对话框的解决方法
- ASP.NET 弹出对话框和页面之间传递值的经验总结
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(6):服务器端和客户端数据类型的自动转换:复杂类型
- 在使用ASP.NET AJAX时用alert弹出对话框
- ASP.NET 弹出对话框和页面之间传递值的经验总结
- Asp.net常用语句20条.//弹出对话框.点击转向指定页面 (转)
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(6):服务器端和客户端数据类型的自动转换:复杂类型
- Asp.net常用语句20条.//弹出对话框.点击转向指定页面
- C# ASP.NET中无刷新页面 弹出对话框,并且页面跳转
- asp.net页面弹出对话框
- ASP.NET 弹出对话框和页面之间传递值的经验总结二【子回主】(转)
- ASP.NET 弹出对话框和页面之间传递值的经验总结【转】
- asp.net使用ajax后如何在客户端弹出提示对话框