此为自定义控件代码:编译成功。
using System;
using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Diagnostics;
namespace EBusiness
{
/// <summary>
/// PostBack 的摘要说明。
/// </summary>
[DefaultEvent("EventClickPrevious"),DefaultProperty("Text")]
public class PostBack:WebControl,IPostBackDataHandler,IPostBackEventHandler
{
public PostBack()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
        protected static readonly object EventClickPrevious=new object();//定义一个键,用于EventHandler中存储和取回事件委
#region IPostBackDataHandler 成员 public virtual string Text
{
get
 {string s=(string)ViewState["Text"];
return ((s==null)?String.Empty:s);
 }
set
 {ViewState["Text"]=value;}
}
public virtual string PreviousText
{
get
{
string s=(string)ViewState["PreviousText"];
return ((s==null)?String.Empty:s);
}
set
{ViewState["PreviousText"]=value;}
}
//protected override HtmlTextWriterTag TagKey
//{
// get
/// {
// return HtmlTextWriterTag.div;
// }
//}
protected override void Render(HtmlTextWriter writer)
{
if (Page!=null)
{Page.VerifyRenderingInServerForm(this);}
base.Render (writer);
}
protected override void RenderContents(HtmlTextWriter writer)
{
//writer.Write(Text);
writer.AddAttribute(HtmlTextWriterAttribute.Onclick,Page.GetPostBackEventReference(this,"Previous"));
writer.AddAttribute("language","javascript");
writer.RenderBeginTag(HtmlTextWriterTag.Button);
writer.Write(this.PreviousText);
writer.RenderEndTag();
} public event EventHandler ClickPrevious //events 为EeventHandlerList类型。
{
add
{Events.AddHandler("EventClickPrevious",value);}
remove
{Events.RemoveHandler("EventClickPrevious",value);} }
          
public void RaisePostDataChangedEvent()
{
// TODO:  添加 PostBack.RaisePostDataChangedEvent 实现
} public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)
{
// TODO:  添加 PostBack.LoadPostData 实现
return true;
} #endregion #region IPostBackEventHandler 成员  void IPostBackEventHandler.RaisePostBackEvent(string eventArgument)
{
// TODO:  添加 PostBack.RaisePostBackEvent 实现

 if (eventArgument=="Previous")
 {
 OnClickPrevious(EventArgs.Empty);
 }

}
//protected override void AddAttributesToRender(HtmlTextWriter writer)
//{
// base.AddAttributesToRender (writer);
      //  writer.AddAttribute(HtmlTextWriterAttribute.Href,Page.GetPostBackClientHyperlink(this,String.Empty));.

// }

protected virtual void OnClickPrevious(EventArgs e)
{
EventHandler clickPreviousHandler=(EventHandler)Events["ClickPrevious"];
if (clickPreviousHandler!=null)
{ clickPreviousHandler(this,e);
    }
} #endregion
//protected override void RenderChildren(HtmlTextWriter writer)
//{

//}
}
}

解决方案 »

  1.   

    以上定义页面调用程序:
    但没有显示Page.Response.Write("you clicked the previous button");中输出的内容。???
    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;
    using System.Diagnostics;
    namespace EBusiness
    {
    /// <summary>
    /// SimpleLinkButton 的摘要说明。
    /// </summary>
    public class SimpleLinkButton : System.Web.UI.Page
    {
    protected EBusiness.PostBack mylinkbtn;

    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.mylinkbtn.Init += new System.EventHandler(this.mylinkbtn_Init);
    this.mylinkbtn.ClickPrevious += new System.EventHandler(this.mylinkbtn_ClickPrevious);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion private void mylinkbtn_ClickPrevious(object sender, System.EventArgs e)
    {
        
    Page.Response.Write("you clicked the previous button");
    //可能没有触发事件。
    } private void mylinkbtn_Init(object sender, System.EventArgs e)
    {

    }
    }
    }