ASP.NET2.0服務(wù)器控件之創(chuàng)建復(fù)雜屬性_.Net教程
推薦:面向服務(wù)及其在互聯(lián)系統(tǒng)策略中的角面向服務(wù)的業(yè)務(wù)環(huán)境 面向服務(wù)是一種創(chuàng)建分布式系統(tǒng)的方法。在它最抽象的層面,面向服務(wù)作為一個(gè)服務(wù)提供程序,包含了一切——從大型機(jī)應(yīng)用程序到打印機(jī)到碼頭工作人員到隔夜交貨公
本文詳細(xì)講解了一個(gè)利用ASP.NET 2.0技術(shù)創(chuàng)建復(fù)雜屬性的示例。
1、示例應(yīng)用
本文所實(shí)現(xiàn)的示例很簡單,其核心是通過實(shí)現(xiàn)自定義服務(wù)器控件的連字符形式復(fù)雜屬性來說明復(fù)雜屬性的實(shí)現(xiàn)方法,其中使用了上一篇文章中介紹的內(nèi)容。
頁面顯示了公司所在城市、姓名、性別和職務(wù)信息。這些內(nèi)容是定義服務(wù)器控件呈現(xiàn)的結(jié)果,其中公司所在城市由簡單屬性City設(shè)置,姓名、性別和職務(wù)由復(fù)雜屬性Employee設(shè)置,其中包括子屬性Name,Sex和Title設(shè)置。下面列舉了示例應(yīng)用程序的Default.aspx文件源代碼。
| 以下為引用的內(nèi)容: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <%@ Register Namespace="WebControlLibrary" Assembly="WebControlLibrary" TagPrefix="Cp" %> <!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>實(shí)現(xiàn)連字符形式復(fù)雜屬性</title> </head> <body> <form id="form1" runat="server"> <div> <Cp:Company ID="demo1" runat="server" City="重慶" Employee-Name="小李" Employee-Sex="男" Employee-Title="銷售經(jīng)理" /> </div> </form> </body> </html> |
如上代碼所示,主要設(shè)置了@ Register指令和自定義服務(wù)器控件Company。前者用于為頁面引入自定義服務(wù)器控件Company,從而實(shí)現(xiàn)控件在頁面中的應(yīng)用。在自定義服務(wù)器控件Company中主要設(shè)置了City、Employee-Name、Employee-Sex和Employee-Title。同時(shí),在開發(fā)人員編碼過程中將會(huì)發(fā)現(xiàn),以上4個(gè)屬性均為Visual Studio 2005的智能感知功能所支持。
另外,讀者還可以以另一種非連字符形式設(shè)置Company控件屬性。具體代碼如下所示:
| 以下為引用的內(nèi)容: <Cp:Company ID="Company1" runat="server" City="重慶"> <Employee Name="小李" Sex="男" Title="銷售經(jīng)理"> </Employee> </Cp:Company> |
實(shí)際上,以上設(shè)置Company控件屬性的方法與前文利用連字符設(shè)置屬性的方法是完全一致的。對(duì)于所有連字符形式屬性,可以任意使用二者之一。如果是基于代碼可讀性的角度而言,后者比前者的可讀性更強(qiáng)一些。
2、實(shí)現(xiàn)方法
上一小節(jié)中的Default.aspx頁面所包含的Company控件具有3個(gè)連字符形式復(fù)雜屬性。它們是如何實(shí)現(xiàn)的呢?實(shí)際上,實(shí)現(xiàn)這種形式的復(fù)雜屬性關(guān)鍵是,在自定義服務(wù)器控件實(shí)現(xiàn)過程中,對(duì)復(fù)雜屬性及其子屬性設(shè)置特定的設(shè)計(jì)時(shí)元數(shù)據(jù)。
對(duì)于復(fù)雜屬性而言,主要在該屬性實(shí)現(xiàn)前設(shè)置兩個(gè)設(shè)計(jì)時(shí)元數(shù)據(jù):DesignerSerializationVisibility和NotifyParentProperty。DesignerSerializationVisibility用于指定在設(shè)計(jì)時(shí)序列化組件上的屬性時(shí),所使用的持久性類型。NotifyParentProperty可使得屬性瀏覽器中對(duì)子屬性的修改通知一直上傳到對(duì)象模型,并在被修改了子屬性的控件中產(chǎn)生修改通知。對(duì)于子屬性的設(shè)計(jì)時(shí)元數(shù)據(jù)設(shè)置比較簡單,只需在子屬性實(shí)現(xiàn)前設(shè)置一個(gè)NotifyParentProperty即可。
實(shí)現(xiàn)自定義服務(wù)器控件Company涉及兩個(gè)文件:Company.cs和Employee.cs。前者是自定義服務(wù)器控件的實(shí)現(xiàn)主體,其中包括各種屬性設(shè)置、控件呈現(xiàn)方法RenderContents等等。后者用于實(shí)現(xiàn)復(fù)雜屬性Employee。下面首先列舉了Company.cs文件源代碼。
| 以下為引用的內(nèi)容: using System; [ Bindable(true), Category("Appearance"), Description("員工信息"), DesignerSerializationVisibility( DesignerSerializationVisibility.Content), NotifyParentProperty(true) ] public Employee Employee { protected override void RenderContents(HtmlTextWriter output) { |
以上代碼顯示了自定義服務(wù)器控件Company的實(shí)現(xiàn),其中主要包括了一些屬性和RenderContents方法的內(nèi)容。具體屬性包括2個(gè):一個(gè)是簡單屬性City,另一個(gè)是復(fù)雜屬性Employee。簡單屬性City的實(shí)現(xiàn)使用了視圖狀態(tài)ViewState。復(fù)雜屬性Employee則有些特別,其類型是一個(gè)類Employee。同時(shí),該屬性還設(shè)置了兩個(gè)元數(shù)據(jù)屬性:DesignerSerializationVisibility(DesignerSerializationVisibility.Content)和NotifyParentProperty(true)。前者可用于指定序列化程序應(yīng)該序列化屬性的內(nèi)容即子屬性,后者則可使得屬性瀏覽器中對(duì)子屬性的修改通知一直上傳到對(duì)象模型,并在被修改了子屬性的控件中產(chǎn)生修改通知。以上兩個(gè)設(shè)計(jì)時(shí)元數(shù)據(jù)屬性的設(shè)置是實(shí)現(xiàn)連字符形式復(fù)雜屬性的關(guān)鍵之一。另一個(gè)關(guān)鍵之處在于為在實(shí)現(xiàn)復(fù)雜屬性的子屬性時(shí)未其設(shè)置元數(shù)據(jù)屬性。
下面列舉了具體實(shí)現(xiàn)復(fù)雜屬性Employee的Employee.cs文件源代碼。
| 以下為引用的內(nèi)容: using System; public String Name { [ Bindable(true), Category("Appearance"), DefaultValue(""), Description("員工性別"), NotifyParentProperty(true) ] public String Sex { [ Bindable(true), Category("Appearance"), DefaultValue(""), Description("員工職務(wù)"), NotifyParentProperty(true) ] public String Title { |
以上代碼實(shí)現(xiàn)了Employee類,其中包括構(gòu)造函數(shù)和屬性Name、Sex和Title。讀者需要注意,為了實(shí)現(xiàn)連字符形式復(fù)雜屬性,以上3個(gè)屬性都必須設(shè)置元數(shù)據(jù)屬性NotifyParentProperty(true)。這樣,當(dāng)子屬性發(fā)生修改時(shí),.NET框架將自動(dòng)產(chǎn)生修改通知,并且通知到父屬性Employee。
3、小結(jié)
本文通過一個(gè)典型示例介紹了創(chuàng)建連字符形式復(fù)雜屬性的實(shí)現(xiàn)方法。對(duì)于其他形式的復(fù)雜屬性,例如,內(nèi)部嵌套形式復(fù)雜屬性、內(nèi)部嵌套形式默認(rèn)復(fù)雜屬性等,本文將不再做更多解釋。實(shí)際上,實(shí)現(xiàn)復(fù)雜屬性是有其自身規(guī)律可循的。只要讀者能夠按照規(guī)定的方法實(shí)現(xiàn),基本上都不會(huì)出現(xiàn)太大的問題。
分享:使用Data Access Application Block 得到存儲(chǔ)過程的返回值今天有位朋友問我如何在Data Access Application Block中得到存儲(chǔ)的過程的返回值,我才發(fā)現(xiàn)自己以前寫的文章中確實(shí)沒提到這方面的問題,現(xiàn)在來補(bǔ)充一下,具體的解決方法如下: 1、首先建立一
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實(shí)例(可帶附件)
- js實(shí)現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實(shí)現(xiàn)
- Asp.Net 無刷新文件上傳并顯示進(jìn)度條的實(shí)現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見代碼存在的偽造IP問題探討
- VS2010 水晶報(bào)表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(連接字符串的配置及獲取)
- asp.net頁面?zhèn)髦禍y試實(shí)例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲(chǔ)過程實(shí)現(xiàn)分頁示例代碼
.Net教程Rss訂閱編程教程搜索
.Net教程推薦
- 淺析C#中的Adapter設(shè)計(jì)模式
- 解析.Net編程接口剖析系列之比較和排序
- .net開發(fā)投票機(jī)的思路
- 采用Native 引導(dǎo)方式的.Net加密保護(hù)
- 用SQL語句修復(fù)SQL Server數(shù)據(jù)庫
- .net中as和is之間的區(qū)別分析
- 深入分析XmlSerializer對(duì)象的Xml序列化與反序列化的示例詳解
- c#生成圖片縮略圖的類(2種實(shí)現(xiàn)思路)
- 讓沒有安裝.NET Framwork的機(jī)器運(yùn)行.NET 程序
- 注冊頁實(shí)現(xiàn)激活郵箱驗(yàn)證(asp.net c#)
- 相關(guān)鏈接:
- 教程說明:
.Net教程-ASP.NET2.0服務(wù)器控件之創(chuàng)建復(fù)雜屬性
。