可不可以在一个.aspx页面或组件中定义一个事件,在另一个页面中触发。也就是说实现两个WebForm之间通讯。

解决方案 »

  1.   

    没有任何区别,在具体web页面实现的时候,如果不是借助WebControl的回送的话,自己实现要就可能需要实现IPostBackEventHandler的接口
      

  2.   

    如果还不是很清楚,或者需要具体的帮助,联系[email protected]
      

  3.   

    public  class XLabel:Label,IPostBackEventHandler
    //public  class XLabel:Label,IPostBackEventHandler,IPostBackDataHandler
    {
    public event System.EventHandler OnDblClick;
    public event System.EventHandler OnClick;
    internal string dd;

    public XLabel()
    {

    } protected override void RenderContents(HtmlTextWriter writer)
    {
    base.RenderContents(writer);
    }
    public virtual void RaisePostBackEvent(string eventArg)
    {
    ProcessEvents(eventArg);
    // System.EventArgs s = new EventArgs();
    // OnMouseSend(s);
    RaisePostDataChangedEvent();
    }
    public bool ProcessEvents(string Eevent)
    {
    bool rb = false;
    if(Eevent == "OnDblClick")
    dd = "OnDblClick";
    else
    dd = "OnClick";
    rb = true;
    return rb;
    }
    public  void RaisePostDataChangedEvent()
    {
    System.EventArgs eh = new EventArgs();
    if(dd == "OnClick")
    {
    this.OnClickSend(eh);
    }
    if(dd == "OnDblClick")
    this.OnDblClickSend(eh);
    }
    public override void RenderBeginTag(HtmlTextWriter writer)
    {
    writer.WriteLine();
    writer.Write("<!------------------------------ ");
    writer.Write("Powerise Web UI Pager Start");
    writer.WriteLine(" ------------------------------>");
    if(AutoPostBack)
    //Page.RegisterRequiresPostBack(this);
    {
    //this.Attributes.Add("Ondblclick",Page.GetPostBackClientEvent(this,"Ondblclick"));
    this.Attributes.Add("oncontextmenu",Page.GetPostBackClientEvent(this,"OnDblClick"));
    this.Attributes.Add("Onclick",Page.GetPostBackClientEvent(this,"Onclick"));
    }
    //writer.AddAttribute("OnClick","__doPostBack("+this.UniqueID+",'')");
    base.RenderBeginTag(writer);

    //writer.WriteAttribute("Onclick","dd()");
    }
    [DefaultValue(true),
    Category("是否回送!"),
    Description("Made by Minsky[x3q]") ]
    public bool AutoPostBack
    {
    set{ViewState["AutoPostBack"]=value;}
    get
    {
    object obj=ViewState["AutoPostBack"];
    return (obj==null)?true:(bool)obj;
    }
    }
    protected virtual void OnDblClickSend(EventArgs e)
    {
    if(OnDblClick != null)
    {
    //if(this.AutoPostBack)
    OnDblClick(this,e);
    }
    }
    protected virtual void OnClickSend(EventArgs e)
    {
    if(OnClick != null)
    {
    //if(this.AutoPostBack)
    OnClick(this,e);
    }
    }
    #region IPostBackDataHandler 成员 public bool LoadPostData(string postDataKey, NameValueCollection postCollection)
    {
    // TODO:  添加 XLabel.LoadPostData 实现
    return false;
    } #endregion
    }

    public delegate void LabelSendEventHandle(object sender,EventArgs e);
    /// <summary>
    /// TestWUC 的摘要说明。
    /// </summary>
    public class TestWUC : System.Web.UI.UserControl
    {
    protected System.Web.UI.WebControls.Button Button1;
    protected System.Web.UI.WebControls.Label Label1;
    public System.Web.UI.WebControls.Panel Panel1;
    public WebTest.XLabel XLabel1;

    public event System.EventHandler LabelOnmouseover;
    public event System.EventHandler myClick;
    public event System.EventHandler MyClick;
    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    //Label2.OnMouseOver += new 
    this.XLabel1.Text = "I Love you";
    //this.Label2.Attributes.Add("onclick",Page.GetPostBackClientEvent(this.Label1,""));
    //this.Label1.Attributes.Add("onclick",Page.RegisterRequiresRaiseEvent(this.Label1));
    } #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器
    /// 修改此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
    this.Load += new System.EventHandler(this.Page_Load);
    this.Button1.Click += new System.EventHandler(internalClick);
    this.XLabel1.OnClick += new System.EventHandler(internalClick1);
    this.XLabel1.OnDblClick += new System.EventHandler(internalClick2);
    //this.Label1.Attributes.["onclick"]
    //this.Button1.Click += new ButtonClick(SendMessage);

    }
    #endregion
    protected virtual void SendMessage(EventArgs e)
    {
    if(MyClick != null)
    MyClick(this,e);
    }
    public void dd()
    {
    this.SendMessage(EventArgs.Empty);
    }
    private void internalClick(object sender,System.EventArgs e)
    {
    if (myClick != null)
    myClick(sender,e);
    }
    private void internalClick1(object sender,System.EventArgs e)
    {
    if(LabelOnmouseover!= null)
    LabelOnmouseover(sender,e);
    }
    private void internalClick2(object sender,System.EventArgs e)
    {
    this.XLabel1.Text = "Minsky";
    }
    }