可以弹出确认对话框的自定义Web服务器控件ConfirmButton | ||
经常在论坛里看到类似这样的问题:“…如何在点击删除按钮的时候弹出个确认删除对话框”。 下面我们来自己写一个这样的自定义Web服务器控件! 思路如下: 继承System.Web.UI.WebControls.Button控件 增加一个属性“ConfirmMessage”来表示弹出确认框上面的提示信息。 在服务器控件呈现在页面之前把一段javascript写到页面 内容如下: <script language="JavaScript"> <!-- function _doAspxBoyConfirm() { return confirm("你确认删除/保存吗??") } //--> </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 { /// <summary> /// Button点击时会弹出一个对话框要求确认 /// </summary> public class ConfirmButton : System.Web.UI.WebControls.Button { private string _confirmMessage; /// <summary> /// 当客户端点击此Button时弹出的提示消息筐的内容 /// </summary> public string ConfirmMessage { get { return _confirmMessage; } set { _confirmMessage = value; } } protected override void OnPreRender(System.EventArgs e) { StringBuilder sb = new StringBuilder(); sb.Append("<script language=/"JavaScript/">"); sb.Append(System.Environment.NewLine); sb.Append("<!--"); sb.Append(System.Environment.NewLine); sb.Append("/*--------------------------------------------"); sb.Append(System.Environment.NewLine); sb.Append("ControlName:/t/tAspxBoy.Com.ConfirmButton"); sb.Append(System.Environment.NewLine); sb.Append("AuthorName:/t/t/tHuobazi,WuMeibo"); sb.Append(System.Environment.NewLine); sb.Append("CopyRight:/t/t/twww.AspxBoy.Com"); sb.Append(System.Environment.NewLine); sb.Append("---------------------------------------------*/"); sb.Append(System.Environment.NewLine); sb.Append("function _doAspxBoyConfirm()"); sb.Append(System.Environment.NewLine); sb.Append("{"); sb.Append(System.Environment.NewLine); sb.Append("return confirm(/""); sb.Append(ConfirmMessage); sb.Append("/")"); sb.Append(System.Environment.NewLine); sb.Append("}"); sb.Append(System.Environment.NewLine); sb.Append("//-->"); 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("AspxBoy.Com.ConfirmButton Start"); writer.Write("/tAuthorName: /tHuobazi"); writer.WriteLine(" --------------------->"); 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(); } } } |
可以弹出确认对话框的自定义Web服务器控件ConfirmButton
最新推荐文章于 2021-08-03 13:33:29 发布