WebConfirm控件

/*

  • 在看这个控件代码之前,先要熟悉以下内容:
  • 0.ViewState机制和作用。
    1. 事件机制。
    1. 回发机制:在非窗体控件中保持客户端更改,ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconpersistingclient-sidechangesinnon-formcontrol.htm
    1. 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
{
///

1<summary>   
2/// 客户端点击“确定”触发的服务端事件.在CliekTrue执行完后,e.OtherMessageData被重置为null。   
3/// </summary>

public event EventDataHandler CliekTrue;
///

1<summary>   
2/// 显示的提示信息   
3/// </summary>

public string Message
{
get
{
object obj = ViewState["Message"];
return (obj == null) ? String.Empty : (string)obj;
}

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

///

1<summary>   
2/// 调用ShowConfirmBox函数所带的数据信息,可以在CliekTrue中接收。在CliekTrue执行完后,OtherMessageData被重置为null。   
3/// </summary>

protected object OtherMessageData
{
get
{ return ViewState["OtherMessage"]; }
set
{ ViewState["OtherMessage"] = value; }
}

///

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

protected string HelperID
{
get
{
return "__" + ClientID + "_State";
}
}
///

1<summary>   
2/// 将控件注册需要回发处理的控件,在初始化时   
3/// </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, "");
}
}

///

1<summary>   
2/// 实现 IPostBackDataHandler 接口   
3/// </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事件
    }
    ///
1<summary>   
2/// 实现 IPostBackDataHandler 接口   
3/// </summary>

void IPostBackDataHandler.RaisePostDataChangedEvent()
{
if (CliekTrue != null)
{
CliekTrue(this,new EventDataArgs(this.OtherMessageData));
this.OtherMessageData=null; //事件执行后清除this.OtherMessageData引用。
}
}
///

1<summary>   
2/// 客户端发出确认框。   
3/// </summary>

///

1<param name="OtherMessageData"/>

在ClickTrue事件中,可以使用到的数据
public void ShowConfirmBox( object otherMessageData)
{
ShowConfirmBox(this.Message,otherMessageData);
}
///

1<summary>   
2/// 客户端发出确认框。   
3/// </summary>

///

1<param name="OtherMessageData"/>

在ClickTrue事件中,可以使用到的数据
///

1<param name="message"/>

确认提示信息
public void ShowConfirmBox(string message,object otherMessageData )
{
this.OtherMessageData=otherMessageData;
Page.RegisterStartupScript("__ShowConfirmBox","

1<script>document.getElementById(\""+this.HelperID+"\").value=confirm(\""+Js.jsCode(message)+"\");document.forms[0].submit();</script>

");
}
}
}

///

1<summary>   
2/// 含有一个Ojbect的事件参数类   
3/// </summary>

public class EventDataArgs:System.EventArgs
{
public object EventData;
public EventDataArgs(object eventData)
{
EventData=eventData;
}
}
///

1<summary>   
2/// 对应EventDataArgs的委托   
3/// </summary>

public delegate void EventDataHandler(object sender, EventDataArgs e);

public class Js
{
public static string Alert(string s)
{
return "

1<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

1@ Register TagPrefix="cc1" Namespace="CenxaoiWebControls" Assembly="MakingControls" 
1@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="MakingControls.WebForm1" 
 1<html>
 2<head>
 3<title>WebForm1</title>
 4<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR"/>
 5<meta content="C#" name="CODE_LANGUAGE"/>
 6<meta content="JavaScript" name="vs_defaultClientScript"/>
 7<meta content=" http://schemas.microsoft.com/intellisense/ie5 " name="vs_targetSchema"/>
 8<script>
 9</script>
10</head>
11<body ms_positioning="GridLayout">
12<form id="Form1" method="post" runat="server">
13<asp:button id="Button1" runat="server" text="删除"></asp:button>
14<asp:button id="Button2" runat="server" text="审核"></asp:button>
15<cc1:webconfirm id="WebConfirm1" runat="server"></cc1:webconfirm>
16</form>
17</body>
18</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
{
///

1<summary>   
2/// WebForm1 的摘要说明。   
3/// </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);
}

///

1<summary>   
2/// 设计器支持所需的方法 - 不要使用代码编辑器修改   
3/// 此方法的内容。   
4/// </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())
{
//在这里写执行审核的代码。
}
}
}
}

Published At
Categories with Web编程
Tagged with
comments powered by Disqus