可以弹出确认对话框的自定义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();
  
   }
  
   }
  
  } 
  
目录
相关文章
|
3月前
|
安全 前端开发 API
【Azure 应用服务】Azure Web App 服务默认支持一些 Weak TLS Ciphers Suite,是否有办法自定义修改呢?
【Azure 应用服务】Azure Web App 服务默认支持一些 Weak TLS Ciphers Suite,是否有办法自定义修改呢?
|
3月前
|
开发框架 JavaScript 前端开发
震撼!破解 ASP.NET 服务器控件 Button 执行顺序之谜,颠覆你的开发认知!
【8月更文挑战第16天】在ASP.NET开发中,通过Button控件实现先执行JavaScript再触后台处理的需求十分常见。例如,在用户点击按钮前需前端验证或提示,确保操作无误后再传递数据至后台深度处理。此过程可通过设置Button的`OnClientClick`属性调用自定义JavaScript函数完成验证;若验证通过,则继续触发后台事件。此外,结合jQuery也能达到相同效果,利用`__doPostBack`手动触发服务器端事件。这种方式增强了应用的交互性和用户体验。
44 8
|
3天前
|
前端开发 开发者
WEB自定义页面请求响应
Web组件支持在应用拦截到页面请求后自定义响应请求能力。开发者通过onInterceptRequest()接口来实现自定义资源请求响应 。自定义请求能力可以用于开发者自定义Web页面响应、自定义文件资源响应等场景。
|
2月前
|
开发框架 JavaScript 前端开发
|
3月前
|
开发者 Java Spring
JSF 牵手社交登录,如魔法风暴席卷 Web 世界,开启震撼便捷登录之旅!
【8月更文挑战第31天】在互联网时代,便捷登录成为用户的核心需求。社交登录凭借其便捷性、安全性和社交化的特点,在各类Web应用中广泛应用。JavaServer Faces(JSF),作为一款流行的Java Web框架,能够轻松集成社交登录功能,显著提升用户体验。本文详细介绍社交登录的优势,并提供两种JSF集成社交登录的常见方法:一是利用Spring Social等第三方库简化开发;二是自行实现社交登录流程。开发者可根据项目需求选择适合的方案。
39 0
|
3月前
|
开发者 C# UED
如何轻松将WinUI控件引入Web应用?Uno Platform实战攻略——从环境搭建到性能优化,一探究竟!
【8月更文挑战第31天】Uno Platform 通过支持 WebAssembly,将 WinUI 控件无缝带入 Web,为多平台开发提供了新途径。本文介绍如何在 Web 中使用 WinUI 控件,包括环境搭建、控件使用、性能优化、样式调整及测试调优,助力开发者打造高质量跨平台应用。
52 0
|
3月前
|
数据采集 前端开发 开发者
Angular表单控件详解:掌握模板驱动与响应式表单的精髓,让Web应用中的数据采集工作变得高效又简单,彻底告别繁琐的表单处理流程
【8月更文挑战第31天】表单是 Web 应用的关键组件,用于用户登录、注册及信息提交。Angular 作为成熟前端框架,提供了强大的表单处理功能,包括模板驱动与响应式表单。本文通过技术博客形式,详细介绍这两种表单控件,并提供示例代码,展示如何利用它们简化表单处理流程,提高开发效率。首先介绍简单的模板驱动表单,然后讲解基于 RxJS 的响应式表单,适用于复杂逻辑。通过本文,你将学会如何高效地使用 Angular 表单控件,提升应用的用户体验。
32 0
|
3月前
|
JavaScript PHP 开发者
PHP中的异常处理与自定义错误处理器构建高效Web应用:Node.js与Express框架实战指南
【8月更文挑战第27天】在PHP编程世界中,异常处理和错误管理是代码健壮性的关键。本文将深入探讨PHP的异常处理机制,并指导你如何创建自定义错误处理器,以便优雅地管理运行时错误。我们将一起学习如何使用try-catch块捕获异常,以及如何通过set_error_handler函数定制错误响应。准备好让你的代码变得更加可靠,同时提供更友好的错误信息给最终用户。
|
3月前
|
网络协议 Ubuntu Linux
如何在 DigitalOcean 云服务器上创建自定义品牌名称服务器
如何在 DigitalOcean 云服务器上创建自定义品牌名称服务器
52 0
|
14天前
|
弹性计算 网络安全
阿里云国际OpenAPI多接口快速管理ECS服务器教程
阿里云国际OpenAPI多接口快速管理ECS服务器教程