今天有空整理一下关于弹出对话框的一些处理。
之前写VB程序时,我们可以很方便地来一句 MsgBox,但是在asp.net程序中想要实现这个却不是那么地容易了。写asp.net程序也快一年了,发现程序中经常要向用户弹出一些信息提示框,例如保存数据成功时的“保存成功!”、删除前的提示“你确定要删除吗?确定 取消 ”等等。我经常用的,也是比较简单的就是“Response.Write("<script>window.alert('保存成功!');</script>")”。当然也有一些其它的方法,现在整理一下:
(1) 对于页面完成一个操作后,弹出一个对话框提示是否“操作成功”。
Example:
- Response.Write("<script>window.alert('操作成功!')</script>");
(2) 点击页面上的按钮,弹出一个对话框提示是“确定”还是“取消”操作,比如删除前的提示等。这个常用的是在按钮中添加属性来实现的:
Example:
- //这个是在GridView中实现删除前的提示操作
- protected void UserList_RowDataBound(object sender, GridViewRowEventArgs e)
- {
- ImageButton deleteBtn = (ImageButton)e.Row.FindControl("deleteBtn");
- if (deleteBtn != null)
- {
- deleteBtn.Attributes.Add("onclick", "return confirm('你确定要删除所选择的用户吗?');");
- }
- }
(3)允许 ASP.NET 服务器控件在 Page 中发出客户端脚本块,弹出时不会刷新页面:
public virtual void RegisterStartupScript(string key,string script);
Example:
- if(!this.IsStartupScriptRegistered("hello"))
- this.RegisterStartupScript("hello","<script>alert('你好!')</script>");
- ///也可写成如下形式,同时将不再出现“System.Web.UI.Page.IsClientScriptBlockRegistered(string)”已过时的警告。
- //Page.ClientScript.RegisterStartupScript(this.GetType(),"","<script>alert('请选择要上传的文件名!')</script>");
然而如果是对页面中的某一个Button按钮来说,当既激发校验,同时又想弹出确认对话框时,以上的方法将产生冲突。因为二者在生成javascript时都会生成onlick事件的处理方法。所以,应将按钮属性CausesValidation设为false,并在页面的page_load中应添加如下代码来实现上述效果:
- deleteBtn.Attributes["onclick"]="if (typeof(Page_ClientValidate) == 'function') if(Page_ClientValidate()) return confirm('确定要删除数据吗?'); ";
这样的处理,才能保证先走验证校验,后弹出消息提示框,符合用户的操作习惯。