控制項回傳系列一(IPostBackEventHandler)

來源:互聯網
上載者:User

MSDN:

定義 ASP.NET 伺服器控制項為處理回傳事件而必須實現的方法。

命名空間:System.Web.UI
程式集:System.Web(在 system.web.dll 中)

文法:

public interface IPostBackEventHandler

 

公用方法:

RaisePostBackEvent:當由類實現時,使伺服器控制項能夠處理將表單發送到伺服器時引發的事件。(要觸發的事件都寫在該方法中)

 

引言:我們經常發現,將一個Button按鈕拖到aspx頁面中,然後設定一下OnClick屬性(onClick="Button1_Click"),瀏覽頁面時,單擊Button,AutoPostBack,並且執行了後台代碼:Button1_Click。當然不只是Button,其他諸如LinkButton、TextBox等都會AutoPostBack處理相應事件,這是為什嗎?我們可以自己做出一個控制項也能實現AutoPostBack並且處理自己的事件嗎?

我們可以看看Button類是怎麼實現的:

public class Button : WebControl, IButtonControl, IPostBackEventHandler
看到了吧,IPostBackEventHandler介面,正是實現了這個介面才使得Button擁有了回傳的功能,IPostBackEventHandler使我們看到了希望與曙光。
IPostBackEventHandler介面中有一個方法:void RaisePostBackEvent ( string eventArgument),eventArgument 表示要傳遞到事件處理常式的可選事件參數的 String。
msdn對於RaisePostBackEvent 的解釋是:

該頁將 eventArgument 參數的值傳遞給實現 IPostBackEventHandler介面的控制項的 RaisePostBackEvent 方法。此控制項還會呈現導致發生回傳的 HTML 元素。如果控制項呈現了用於回傳的用戶端指令碼,則會在 eventArgument 參數中傳遞指令碼中的參數。如果回傳是由簡單提交操作所引起的,則 eventArgument 參數為 Null 參考(在 Visual Basic 中為 Nothing)。

此方法為 HTML 和 Web 伺服器控制項實現的許多事件提供功能。

看看我的例子吧,會讓你豁然開朗的。

自訂控制項

namespace MyPostBackControlSet{    public class MyPostBackControl : Control, IPostBackEventHandler    {        //申明Click事件委託        public event EventHandler Click;        public MyPostBackControl()        {             //            // TODO: Add constructor logic here            //        }        //實現RaisePostBackEvent方法,處理回傳事件        public void RaisePostBackEvent(string eventArgument)        {            OnClick(this, EventArgs.Empty);        }        //定義OnClick事件處理常式        protected void OnClick(Object sender, EventArgs e)        {            if (Click != null)            {                Click(this, e);            }        }        protected override void Render(HtmlTextWriter writer)        {            writer.Write("<input type='submit' name='" + this.UniqueID + "' value='回傳'/>");        }    }}
頁面調用代碼
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="NewFolder1_Default3" %><%@ Register Namespace="MyPostBackControlSet" TagPrefix="U1" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server">    <title>Untitled Page</title></head><body>    <form id="form1" runat="server">    <div>    <U1:MyPostBackControl ID="MyPostBackControl1" runat="server" ></U1:MyPostBackControl>    </div>    </form></body></html>
頁面效果: 

點擊按鈕:

分析:

1、程式實現了IPostBackEventHandler介面,實現了RaisePostBackEvent函數.

2、回傳時,系統便會調用RaisePostBackEvent中的內容.

3、執行自己的事件:執行自己寫的OnClick方法。

綜上:我們可以通過實現IPostBackEventHandler介面,處理伺服器控制項的回傳事件。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.