WebConfirm控件

原创 2005年03月01日 10:09:00

/*
 * 在看这个控件代码之前,先要熟悉以下内容:
 * 0.ViewState机制和作用。
 * 1. 事件机制。
 * 2. 回发机制:在非窗体控件中保持客户端更改,ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconpersistingclient-sidechangesinnon-formcontrol.htm
 * 3. IPostBackDataHandler的作用及实现。
 * 该控件是Asp.Net服务端控件。弹出Confirm,确认提交功能。
 * 当点击按钮时,弹出confirm,提示确认操作,如:用于确认删除。
 * 点击“是”后,提交触发CliekTrue事件,如:可以在该事件内写要执行删除的代码。
 *
 * 附:调用代码
 *
 *
 * 另外:不把EventDataArgs和EventDataHandler写在名字空间内是因为以后很多类会继承这两个类,使用时可以不用引用名字空间就直接使用。
 * */
using System;
using System.Collections;
using System.Collections.Specialized;
using System.Drawing;
using System.Web;
using System.Web.UI;

namespace CenxaoiWebControls
{
 public class WebConfirm : Control,INamingContainer,IPostBackDataHandler
 {
  /// <summary>
  /// 客户端点击“确定”触发的服务端事件.在CliekTrue执行完后,e.OtherMessageData被重置为null。
  /// </summary>
  public event EventDataHandler CliekTrue;
  /// <summary>
  /// 显示的提示信息
  /// </summary>
  public string Message
  {
   get
   {
    object obj = ViewState["Message"];
    return (obj == null) ? String.Empty : (string)obj;
   }

   set
   {
    ViewState["Message"] = value;
   }
  }

  /// <summary>
  /// 调用ShowConfirmBox函数所带的数据信息,可以在CliekTrue中接收。在CliekTrue执行完后,OtherMessageData被重置为null。
  /// </summary>
  protected object OtherMessageData
  {
   get
   { return ViewState["OtherMessage"]; }
   set
   { ViewState["OtherMessage"] = value; }
  }

  /// <summary>
  /// 回发数据的隐藏域ClientID
  /// </summary>

  protected string HelperID
  {
   get
   {
    return "__" + ClientID + "_State";
   }
  }
  /// <summary>
  /// 将控件注册需要回发处理的控件,在初始化时
  /// </summary>

  protected override void OnInit(EventArgs e)
  {
   base.OnInit(e);
   if (Page != null)
    Page.RegisterRequiresPostBack(this);
  }
  protected override void OnPreRender(EventArgs e)
  {
   base.OnPreRender(e);

   if (Page != null)
   {
    Page.RegisterHiddenField(HelperID, "");
   }
  }

  /// <summary>
  /// 实现 IPostBackDataHandler 接口
  /// </summary>

  bool IPostBackDataHandler.LoadPostData(string postDataKey, NameValueCollection postCollection)
  {
   string value = postCollection[HelperID];
   /*
    * 因为值从字典中取出,不知是否取到,所有用value关键字存放变量,value可以与null判断。
    * 隐藏域有有效值
    * */
   if (null!=value&&value.ToLower().IndexOf("true")>-1)
    return true;
   return false; //不触发RaisePostDataChangedEvent事件
  }
  /// <summary>
  /// 实现 IPostBackDataHandler 接口
  /// </summary>

  void IPostBackDataHandler.RaisePostDataChangedEvent()
  {
   if (CliekTrue != null)
   {
    CliekTrue(this,new EventDataArgs(this.OtherMessageData));
    this.OtherMessageData=null; //事件执行后清除this.OtherMessageData引用。
   }
  }
  /// <summary>
  /// 客户端发出确认框。
  /// </summary>
  /// <param name="OtherMessageData">在ClickTrue事件中,可以使用到的数据</param>
  public void ShowConfirmBox(object otherMessageData)
  {
   ShowConfirmBox(this.Message,otherMessageData);
  }
  /// <summary>
  /// 客户端发出确认框。
  /// </summary>

  /// <param name="OtherMessageData">在ClickTrue事件中,可以使用到的数据</param>
  /// <param name="message">确认提示信息</param>

  public void ShowConfirmBox(string message,object otherMessageData )
  {
   this.OtherMessageData=otherMessageData;
   Page.RegisterStartupScript("__ShowConfirmBox","<Script>document.getElementById(/""+this.HelperID+"/").value=confirm(/""+Js.jsCode(message)+"/");document.forms[0].submit();</Script>");
  }
 }
}


/// <summary>
/// 含有一个Ojbect的事件参数类
/// </summary>
public class EventDataArgs:System.EventArgs
{
 public object EventData;
 public EventDataArgs(object eventData)
 {
  EventData=eventData;
 }
}
/// <summary>
/// 对应EventDataArgs的委托
/// </summary>
public delegate void  EventDataHandler(object sender, EventDataArgs e);
 
 public class Js
 {
  public static string Alert(string s)
  {
   return "<script>alert(/""+jsCode(s)+"/")</script>";
  }
  //把字符串转换成客户端js字符串
  public static string jsCode(string s)
  {
   return s.Replace("/t","//t").Replace("/n","//n").Replace("/r","//r").Replace("'","//'").Replace("/"","///"");
  }
 }
调用例子:
页面文件 WebForm1.aspx

<%@ Register TagPrefix="cc1" Namespace="CenxaoiWebControls" Assembly="MakingControls" %>
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="MakingControls.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
 <HEAD>
  <title>WebForm1</title>
  <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
  <meta name="CODE_LANGUAGE" Content="C#">
  <meta name="vs_defaultClientScript" content="JavaScript">
  <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
  <script>
    
  </script>
 </HEAD>
 <body MS_POSITIONING="GridLayout">
  <form id="Form1" method="post" runat="server">
   <asp:Button id="Button1" runat="server" Text="删除"></asp:Button>
   <asp:Button id="Button2" runat="server" Text="审核"></asp:Button>
   <cc1:WebConfirm id="WebConfirm1" runat="server"></cc1:WebConfirm>
  </form>
 </body>
</HTML>

 


页面代码文件 WebForm1.aspx.cs

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace MakingControls
{
 /// <summary>
 /// WebForm1 的摘要说明。
 /// </summary>
 public class WebForm1 : System.Web.UI.Page
 {
  protected CenxaoiWebControls.WebConfirm WebConfirm1;
  protected System.Web.UI.WebControls.Button Button1;
  protected System.Web.UI.WebControls.Button Button2;
 
  private void Page_Load(object sender, System.EventArgs e)
  {
   // 在此处放置用户代码以初始化页面
  }

  #region Web 窗体设计器生成的代码
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
  }
  
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {   
   this.Button1.Click += new System.EventHandler(this.Button1_Click);
   this.Button2.Click += new System.EventHandler(this.Button2_Click);
   this.Load += new System.EventHandler(this.Page_Load);

  }
  #endregion

  private void Button1_Click(object sender, System.EventArgs e)
  {
   WebConfirm1.ShowConfirmBox("确认要删除吗?s/nb/tc'/"","del");
  }
  private void Button2_Click(object sender, System.EventArgs e)
  {
   WebConfirm1.ShowConfirmBox("确认要审核吗?s/nb/tc'/"","审核");
  }
  private void WebConfirm1_CliekTrue(object sender, EventDataArgs e)
  {
   //查看触发提示时的其他信息
   if("del"==e.EventData.ToString())
   {
    //在这里写执行删除的代码。
   }
   else if("审核"==e.EventData.ToString())
   {
    //在这里写执行审核的代码。
   }
  }
 }
}

Android笔记---常用控件以及用法

这篇文章主要记录下Android的常用控件以及使用的方法,Android 给我们提供了大量的UI控件,合理地使用这些控件就可以非常轻松地编写出相当不错的界面,这些是Android学习的基础,没有什么业...
  • netdxy
  • netdxy
  • 2016年02月19日 00:33
  • 11631

ASP.NET初了解(一)--Html控件和Web控件

作为一名ASP.NET的初学者,了解并且区别一些混淆概念是很必须的,今天这篇博文就是主要向大家介绍一下Html控件和Web控件。在ASP.NET中,用户界面控件主要就是Html控件和Web控件,在前台...
  • sunliduan
  • sunliduan
  • 2013年12月18日 19:19
  • 4830

android学习五(android中基本控件的使用)

android的基本的控件的使用
  • wj903829182
  • wj903829182
  • 2014年10月31日 22:55
  • 6736

OC之基本控件一

一、UIButton 1.UIButton状态: UIControlStateNormal          // 正常状态    UIControlStateHighlighted  ...
  • xumingjie1
  • xumingjie1
  • 2014年02月23日 10:28
  • 2234

winform控件学习(1)—常用控件

winform控件学习(—)——常用控件
  • Vikerfeng
  • Vikerfeng
  • 2014年05月19日 22:46
  • 2673

QT之QML控件篇

QT quick中提供了很多的使用控件widget,下面介绍几种常用的。这部分介绍基本是参照QtCretator提供的帮助文档,一定要学会使用,不明白的去查找帮助。Item基本上所有的可是控件的基类都...
  • GG_SiMiDa
  • GG_SiMiDa
  • 2017年07月10日 12:47
  • 752

(重要)三种自定义控件:自绘控件、组合控件、继承控件

转载:http://blog.csdn.net/gebitan505/article/details/27218009 自绘控件:复杂的如流式布局FlowLayout 组合控件:VideoJjLi...
  • oLevin
  • oLevin
  • 2016年04月13日 22:18
  • 2204

常用界面控件种类和使用方法

1.按钮 按钮时uibutton对象 传入按钮的类型参数来创建按钮。 +(id)buttonWithType:(UIButtonType)buttonType; 设置按钮在某一...
  • biu1234567
  • biu1234567
  • 2015年04月06日 14:51
  • 959

windows标准控件的介绍与使用

一、 Windows标准控件概述 (一)Windows标准控件 Windows系统提供的标准控件主要包括静态控件、按钮控件、编辑框控件、列表框控件、组合框控件等,如表所示。 Windows标...
  • u012564690
  • u012564690
  • 2014年07月06日 16:23
  • 3756

C#控件一览表 前所未有的震撼(太详细了)

C#控件及常用设计整理 作者:Mr S.R Lee 出处:http://www.cnblogs.com/LeeYongze 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保...
  • QingHeShiJiYuan
  • QingHeShiJiYuan
  • 2016年08月18日 09:27
  • 2446
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WebConfirm控件
举报原因:
原因补充:

(最多只允许输入30个字)