教你做一个可以弹出确认对话框的自定义Web服务器控件ConfirmButton

经常在论坛里看到类似这样的问题:“ … 如何在点击删除按钮的时候弹出个确认删除对话框”。

下面我们来自己写一个这样的自定义 Web 服务器控件 !

思路如下:

继承 System.Web.UI.WebControls.Button 控件

增加一个属性“ ConfirmMessage ”来表示弹出确认框上面的提示信息。

在服务器控件呈现在页面之前把一段 javascript 写到页面

内容如下:

**

 1<script language="JavaScript"> **
 2
 3** <!--  **
 4
 5** function _doAspxBoyConfirm()  **
 6
 7** {  **
 8
 9** return confirm("  ** ** 你确认删除  /  ** ** 保存吗  ??")  **
10
11** }  **
12
13** //--> **
14
15** </script>

**

查一下 msdn 中对于 ** Control.OnPreRender ** 方法 的描述 ** **

可以得到“ ** 此方法通知服务器控件在保存视图状态和呈现内容之前,执行任何必要的预呈现步骤 ** ”.

所以我们只要在 ** OnPreRender ** ** 方法内 ** ** 用 ** Page.RegisterClientScriptBlock 把这段 javascript 发送到客户端,并且给 Button. Attributes 属性内添加一个“ onclick ”的客户端属性对应值为 : "return _doAspxBoyConfirm()”.

详细情况可以查阅

ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfsystemwebuiwebcontrolswebcontrolclassattributestopic.htm

这样一个具有 ConFirm 功能的 Button 就基本上建立起来了。

新建一个测试该控件的工程

在工具箱上点右键选择“添加 / 移除项”,点击浏览选择编译好的 dll 文件,点击确定,你会发现 ConFirmButton 已经添加到工具箱内了

将其托到一个 Aspx 页面内 在属性设置内给 ConfirmMessage 值为你要的弹出框内容比如“确定删除吗 ? ”,按 F5 运行。

当点该按钮时会弹出一个 confirm 对话框询问“确定删除吗 ? ” , 如果点击确定则执行 button 的 Button_Click 事件,如果点击取消则不执行。

你可以查看他生成的 html 代码,以加深对该控件工作原理的理解

完整的代码如下:

** using System; **

** using System.Web.UI; **

** using System.Web.UI.WebControls; **

** using System.ComponentModel; **

** using System.Text; **


** namespace AspxBoy.Com.ConfirmButton **

** { **

** ///

1<summary> **
2
3** /// Button  ** ** 点击时会弹出一个对话框要求确认  **
4
5** /// </summary>

**

** public class ConfirmButton : System.Web.UI.WebControls.Button **

** { **

** private string _confirmMessage; **

** ///

1<summary> **
2
3** ///  ** ** 当客户端点击此  Button  ** ** 时弹出的提示消息筐的内容  **
4
5** /// </summary>

**

** public string ConfirmMessage **

** { **

** get **

** { **

** return _confirmMessage; **

** } **


** set **

** { **

** _confirmMessage = value; **

** } **

** } **


** protected override void OnPreRender(System.EventArgs e) **

** { **

** StringBuilder sb = new StringBuilder(); **

** sb.Append("

 1<script language='\"JavaScript\"'>");  **
 2
 3** sb.Append(System.Environment.NewLine);  **
 4
 5** sb.Append("<!--");  **
 6
 7** sb.Append(System.Environment.NewLine);  **
 8
 9** sb.Append("/*--------------------------------------------");  **
10
11** sb.Append(System.Environment.NewLine);  **
12
13** sb.Append("ControlName:\t\tAspxBoy.Com.ConfirmButton");  **
14
15** sb.Append(System.Environment.NewLine);  **
16
17** sb.Append("AuthorName:\t\t\tHuobazi,WuMeibo");  **
18
19** sb.Append(System.Environment.NewLine);  **
20
21** sb.Append("CopyRight:\t\t\twww.AspxBoy.Com");  **
22
23** sb.Append(System.Environment.NewLine);  **
24
25** sb.Append("---------------------------------------------*/");  **
26
27** sb.Append(System.Environment.NewLine);  **
28
29** sb.Append("function _doAspxBoyConfirm()");  **
30
31** sb.Append(System.Environment.NewLine);  **
32
33** sb.Append("{");  **
34
35** sb.Append(System.Environment.NewLine);  **
36
37** sb.Append("return confirm(\"");  **
38
39** sb.Append(ConfirmMessage);  **
40
41** sb.Append("\")");  **
42
43** sb.Append(System.Environment.NewLine);  **
44
45** sb.Append("}");  **
46
47** sb.Append(System.Environment.NewLine);  **
48
49** sb.Append("//-->");  **
50
51** sb.Append("</script>

"); **

** Page.RegisterClientScriptBlock("_doAspxBoyConfirm",sb.ToString()); **

** this.Attributes.Add("onclick","return _doAspxBoyConfirm()"); **

** base.OnPreRender(e); **

** } **

** public override void RenderBeginTag(HtmlTextWriter writer) **

** { **

** writer.WriteLine(); **

** writer.Write("

"); **

** writer.Write("<!-------------------- "); **

** writer.Write("Copyright:2004 Huobazi(www.AspxBoy.com)"); **

** writer.Write(" ---------------------"); **

** writer.WriteLine(">"); **

** base.RenderBeginTag(writer); **

** } **

** public override void RenderEndTag(HtmlTextWriter writer) **

** { **

** base.RenderEndTag(writer); **

** writer.WriteLine(); **

** writer.Write("<!------------------------------- "); **

** writer.Write("AspxBoy.Com.ConfirmButton End"); **

** writer.Write(" --------------------------------"); **

** writer.WriteLine(">"); **

** writer.WriteLine(); **

** } **

** } **

** } **

Published At
Categories with Web编程
Tagged with
comments powered by Disqus