.NET的偉大之處之一是它提供的與IE的無(wú)縫集成能力。例如,我們甚至能夠在用戶不知道的情況下從IE中激活一個(gè)Windows Forms控件。盡管利用了由.NET CLR提供的Code Access Security的所有功能,但這是在無(wú)需進(jìn)行注冊(cè)的情況下完成的。
當(dāng)開(kāi)發(fā)Windows Forms控件時(shí),我們就通過(guò)繼承的方式擁有了Windows Forms類所提供的所有功能。例如,我們可以使用Windows Forms控件驗(yàn)證技術(shù)對(duì)用戶輸入的數(shù)據(jù)進(jìn)行廣泛的驗(yàn)證,同樣地,我們可以從窗體控件中調(diào)用遠(yuǎn)程Web服務(wù)。通過(guò)使用所有這些技術(shù),我們就能夠使用.NET平臺(tái)開(kāi)發(fā)豐富、功能強(qiáng)大的應(yīng)用程序。
實(shí)現(xiàn)
在這一部分,我們將學(xué)習(xí)如何創(chuàng)建簡(jiǎn)單的Windows Forms控件并將它托管在IE中。下面是激活I(lǐng)E中Windows Forms控件的5個(gè)步驟:
·創(chuàng)建Windows Forms控件。
·創(chuàng)建包含標(biāo)識(shí)Windows Forms控件的對(duì)象標(biāo)志的HTML文檔。
·配置正確激活控件所需要的虛擬目錄。
·配置代碼訪問(wèn)權(quán)限。
·運(yùn)行該控件。
下面我們就來(lái)詳細(xì)地學(xué)習(xí)上面的每一個(gè)步驟。
創(chuàng)建Windows Forms控件
在這一步驟中,我們將創(chuàng)建一個(gè)簡(jiǎn)單的Windows Forms控件,它向用戶顯示“Hello World”信息。如政略所示,我們將首先創(chuàng)建一個(gè)名為HelloWorldControl的新Visual C# Windows Control Library項(xiàng)目。
一旦創(chuàng)建項(xiàng)目后,我們將把缺省的用戶控件更名為HelloWorldCtl。我們將在用戶控件上添加一個(gè)名為lblMessage的標(biāo)簽控件和一個(gè)名為btnClick的按鈕。當(dāng)用戶點(diǎn)擊點(diǎn)擊按鈕時(shí),程序就會(huì)執(zhí)行下面的代碼,向用戶顯示一個(gè)簡(jiǎn)單的信息:
private void btnClick_Click(object sender, System.EventArgs e) { lblDisplayMessage.Text = "Hello World"; } |
既然已經(jīng)創(chuàng)建了控件,下面我們來(lái)編譯該項(xiàng)目,并創(chuàng)建可執(zhí)行代碼。
創(chuàng)建HTML網(wǎng)頁(yè)
在這一步驟中,我們將創(chuàng)建一個(gè)HTML文檔,并在其中插入用來(lái)激活Windows Forms控件的對(duì)象標(biāo)志。HTML網(wǎng)頁(yè)如下:
<html> <body> <p>Hello World Control<br> <br></body> <o(jì)bject id="HelloWorldControl1"classid="http:HelloWorldControl.dll#HelloWorldControl.HelloWorldCtl" height="500" width="500" VIEWASTEXT> </object> <br><br> </html> |
在對(duì)象標(biāo)志的classid屬性中,我們將路徑指定為控件庫(kù)組合體和控件的全名,控件的全名包括名字空間和控件類名字。從上面的代碼中可以看到,組合體和控件全名之間用#號(hào)隔開(kāi),這二個(gè)參數(shù)構(gòu)成了識(shí)別該控件的唯一控件標(biāo)識(shí)符。由于是唯一地由名字HelloWorldControl1標(biāo)識(shí)的,我們還可以針對(duì)該控件編寫(xiě)客戶端腳本代碼。
配置虛擬目錄
創(chuàng)建HTML代碼后,我們就可以創(chuàng)建一個(gè)名為HelloWorldControlHost的新虛擬目錄,并在其中添加控件(HelloWorldControl.dll)和HTML文檔(HelloWorld.htm)。除了配置虛擬目錄外,將虛擬目錄的執(zhí)行權(quán)限設(shè)置為Scripts也是非常重要的。如果將其執(zhí)行權(quán)限設(shè)置為Scripts & Executables,控件就不會(huì)被正確地激活。通過(guò)打開(kāi)虛擬目錄的Properties窗口,我們可以驗(yàn)證虛擬目錄的權(quán)限。
配置代碼訪問(wèn)權(quán)限
如果控件在企業(yè)內(nèi)部網(wǎng)上,它公正確地執(zhí)行,但如果要運(yùn)行來(lái)自互聯(lián)網(wǎng)網(wǎng)站上的控件,就需要對(duì)IE進(jìn)行配置或修改安全策略,使它能夠運(yùn)行。通過(guò)將托管網(wǎng)頁(yè)看成是受信任區(qū)段的一部分,就能夠做到這一點(diǎn)。為了將你的站點(diǎn)設(shè)置為受信任區(qū)段的一部分,我們可以在IE中通過(guò)選擇“工具”->“選項(xiàng)”->“安全”->“受信任的站點(diǎn)”,然后將你的站點(diǎn)添加到列表中,再點(diǎn)擊“OK”按鈕。這樣下次再瀏覽到該網(wǎng)頁(yè)時(shí),控件就會(huì)得到正確的執(zhí)行,因?yàn)橐呀?jīng)設(shè)置了互聯(lián)網(wǎng)許可。
運(yùn)行控件
要運(yùn)行控件,只要在瀏覽器中瀏覽托管該控件的HTML網(wǎng)頁(yè)即可。在顯示的HTML網(wǎng)頁(yè)中,如果點(diǎn)擊“Click Here”命令按鈕,控件就會(huì)如下圖所示顯示“Hello World”的消息。
在這個(gè)例子中,我們主要演習(xí)了如何創(chuàng)建簡(jiǎn)單的Windows Forms控件,并在IE中托管它。