经常在论坛里看到类似这样的问题:“ … 如何在点击删除按钮的时候弹出个确认删除对话框”。
下面我们来自己写一个这样的自定义 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(); **
** } **
** } **
** } **