日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Tip:使用Extender的ResolveControlID事件

發布時間:2023/12/13 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Tip:使用Extender的ResolveControlID事件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、分析

不知道大家在使用ASP.NET AJAX Control Toolkit里的各個Extender控件時,有沒有接觸過ResolveControlID事件?這個事件在官方也只用了很少的筆墨來描述。的確,這個事件不太常用,看看ASP.NET AJAX的演示站點,根本沒有使用過ResolveControlID事件。

那么這個事件難道沒有什么用嗎?其實不然。這個事件原本不存在于ASP.NET AJAX中,是ASP.NET AJAX Control Toolkit為了方便Extender的開發,而是現在ExtenderControlBase類里的。ASP.NET AJAX Control Toolkit是個非常重要的東西,他提供的ExtenderControlBase類基于ASP.NET AJAX中的ExtenderBase類,提供了許多有用的擴展,大大方便了Extender的開發。ResolveControlID事件就是其中一個。它的作用是幫助Extender找到它需要的控件。

每個Extender控件都會有XXXXID屬性(例如TargetControlID),它們在開發是都會使用IDReferenceAttribute進行標注,這說明這些屬性的“含義”并非只是一個簡單的字符串,它們的作用是表示一個控件。換句話說,就是在Extender工作時提供它所需要的各個控件。大家平時在使用Extender控件時,往往會把Extender和它需要的控件放在同一個Web User Control或者Page中,這時只要為那些ID屬性指定對應的控件ID即可。但是如果Extender需要的控件和Extender本身并不在同一個Web User Contorl或Page中時,該如何告訴Extender,應該使用哪些控件呢?

這就是ResolveControlID事件的作用了。如果要說得更加“專業”一些,ResolveControlID事件的作用是幫助Extender找到不同Naming Container中的控件。Naming Container是ASP.NET頁面模型的概念,它提供了一種“容器”,目的是能夠封裝一些控件,使不同容器間的控件不會因為某些原因而產生沖突(例如服務器端ID)。有了Naming Container,我們可以在頁面上放置多個Web User Control,而每個Web User Control中很有可能會有相同服務器ID的控件,但是它們不會互相沖突。一個Naming Container就是一個實現了INamingContainer接口的控件,它沒有任何方法,它的作用僅僅是為了“標記”。我們平時接觸的Control類和Page類都是先了這個接口,也就是說它們都是Naming Container。

如果我們在瀏覽器中查看頁面中HTML元素的ID,經常可以發現有“xxxx$xxxx$xxx…”這種形式的ID,這也是Naming Container的作用,它也能保證了每個HTML元素的客戶端ID的唯一性。而控件的客戶端ID可以通過它在服務器端的ClientID屬性獲得,不過這就是另外的話題了。

那么ResolveControlID事件是如何生效的呢?ResoveControlID的“事件”參數類型為ResolveControlEventArgs類型,它有一個可寫的Control屬性。當Extender無法在自己所在的Naming Container中找到控件時,就會觸發ResolveControlID事件,然后使用“事件”參數的Control屬性作為找到的控件。我們要做的就是在響應這個事件時設定ResolveControlEventArgs.Control屬性,給定合適的控件。

其實ResolveControlID事件就是這么簡單。

?

2、示例

其實聽了上面的描述,相信大家已經知道如何響應ResolveControlID事件了。不過在這里,我想用一種比較統一的解決方案來實現ResolveControlID。

Naming Container其實也就是包含了其它控件,自然可以是別的Naming Container,因此會形成了“級別”。我們不如把這樣的“級別”通過指定Extender的那些ID屬性描述出來,然后可以順著Naming Container的級別一直找下去。具體的做法,我們通過一個使用ModalPopupExtender的示例來看一下吧。

首先,我們要形成不同的Naming Container。那么在這里,我們把彈出的Panel、OK Button以及Cancel Button放在一個Web User Control中,如下:

<asp:Panel ID="ModalDialogPanel" runat="server" Width="300" style="padding: 10px; border:solid 1px black;">ASP.NET AJAX is a free framework for building a new...<br /><br /><asp:Button ID="OkButton" runat="server" Text="OK" /><asp:Button ID="CancelButton" runat="server" Text="Cancel" /> </asp:Panel>

?

然后就在Page里使用ModalPopupExtener了,請注意,我們為那些ID屬性指定了使用逗號分割的字符串,這種方法就表示了Naming Container的級別。例如PopupControlID為“ModalDialog, ModalDialogPanel”,就表示了彈出的控件是ID為ModalPopupDialog的Naming Container(ModalDialog控件)里的ModalDialogPanel控件(可以在ModalDialog.ascx文件中找到)。如下:

<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager><asp:LinkButton ID="LinkButton1" runat="server">Click Here to Popup a Modal Dialog </asp:LinkButton><ajaxToolkit:ModalPopupExtender ID="ModalPopupExtender" runat="server"TargetControlID="LinkButton1"PopupControlID="ModalDialog, ModalDialogPanel"OkControlID="ModalDialog, OkButton"CancelControlID="ModalDialog, CancelButton"OnResolveControlID="ModalPopupExtender_ResolveControlID" /><uc1:ModalDialog ID="ModalDialog" runat="server" />

?

最后就似乎要響應ResolveControlID事件了,相信大家能夠很輕松的得出它的實現方式。如下:

protected void ModalPopupExtender_ResolveControlID(object sender, ResolveControlEventArgs e) {if (e.ControlID == null) return;string[] controlIds = e.ControlID.Split(',');Control result = this;foreach (string id in controlIds){result = result.FindControl(id.Trim());}e.Control = result; }

?

其實ResolveControlID事件的作用和實現就是這么簡單。下面就是使用效果:

?

點擊這里下載示例文件。

轉載于:https://www.cnblogs.com/JeffreyZhao/archive/2006/12/31/ResolveControlID_Event.html

總結

以上是生活随笔為你收集整理的Tip:使用Extender的ResolveControlID事件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。