WebConfirm控件

<script type="text/javascript"> function StorePage() { d=document; t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():''); void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes')); keyit.focus(); } </script> 

/*
 * 在看这个控件代码之前,先要熟悉以下内容:
 * 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","  }
  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())
   {
    //在这里写执行审核的代码。
   }
  }
 }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值