开发者社区> lzhdim> 正文

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

简介: 经常在论坛里看到类似这样的问题:“…如何在点击删除按钮的时候弹出个确认删除对话框”。      下面我们来自己写一个这样的自定义Web服务器控件!      思路如下:      继承System.Web.UI.WebControls.Button控件      增加一个属性“ConfirmMessage”来表示弹出确认框上面的提示信息。
+关注继续查看
经常在论坛里看到类似这样的问题:“…如何在点击删除按钮的时候弹出个确认删除对话框”。
  
  下面我们来自己写一个这样的自定义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(http://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();
  
   }
  
   }
  
  } 
  

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Flutter 70: 图解自定义 ACEStepper 步进器
0 基础学习 Flutter,第七十步:自定义 ACEStepper 尝试一下!
970 0
gridview自定义button事件 ,无法触发 onrowcommand
如题。 原因:按钮button有回传事件,当点击button,页面回传,已经将原来的页面的事件冲掉了。   解决方法: 1方法:  Page_Load方法里,添加if(!ispostback){//绑定gridview的值}   2方法:去掉button的回传事件,添加一个属性:UseS...
638 0
一种不通过UI给C4C自定义BO创建测试数据的方式
假设我在Cloud Studio里创建了如下一个非常简单的自定义BO: 我想生成一些该BO的实例。以前我采用的做法是给这个自定义BO创建编辑用的UI。然后使用这些UI创建BO实例。这种方式很花费时间。
1395 0
Android使用AttributeSet自定义控件的方法
引用:http://www.cnblogs.com/zwl12549/archive/2011/04/13/2015366.html 所谓自定义控件(或称组件)也就是编写自己的控件类型,而非Android中提供的标准的控件,如TextView,CheckBox等等.
641 0
Flutter 56: 图解自定义 BubbleWidget 气泡插件
0 基础学习 Flutter,第五十六步:尝试一下自定义气泡插件!
2728 0
+关注
lzhdim
人在20岁以意志力著称,在30岁以智慧取胜,在40岁则靠的是理智的判断。 一个人只有时刻保持幸福快乐的感觉,才会使自己更加热爱生命,热爱生活。只有快乐,愉快的心情,才是创造力和人生动力的源泉;只有不断自己创造快乐,与自己快乐相处的人,才能远离痛苦与烦恼,才能拥有快乐的人生。
522
文章
4
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载