日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

ASP.NET2.0服務(wù)器控件之創(chuàng)建復(fù)雜屬性_.Net教程

編輯Tag賺U幣
教程Tag:暫無(wú)Tag,歡迎添加,賺取U幣!

推薦:面向服務(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)的示例很簡(jiǎn)單,其核心是通過(guò)實(shí)現(xiàn)自定義服務(wù)器控件的連字符形式復(fù)雜屬性來(lái)說(shuō)明復(fù)雜屬性的實(shí)現(xiàn)方法,其中使用了上一篇文章中介紹的內(nèi)容。

頁(yè)面顯示了公司所在城市、姓名、性別和職務(wù)信息。這些內(nèi)容是定義服務(wù)器控件呈現(xiàn)的結(jié)果,其中公司所在城市由簡(jiǎn)單屬性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。前者用于為頁(yè)面引入自定義服務(wù)器控件Company,從而實(shí)現(xiàn)控件在頁(yè)面中的應(yīng)用。在自定義服務(wù)器控件Company中主要設(shè)置了City、Employee-Name、Employee-Sex和Employee-Title。同時(shí),在開(kāi)發(fā)人員編碼過(guò)程中將會(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頁(yè)面所包含的Company控件具有3個(gè)連字符形式復(fù)雜屬性。它們是如何實(shí)現(xiàn)的呢?實(shí)際上,實(shí)現(xiàn)這種形式的復(fù)雜屬性關(guān)鍵是,在自定義服務(wù)器控件實(shí)現(xiàn)過(guò)程中,對(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è)置比較簡(jiǎn)單,只需在子屬性實(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;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebControlLibrary{
 [DefaultProperty("Text")]
 [ToolboxData("<{0}:Company runat=server></{0}:Company>")]
 public class Company : WebControl {
  private Employee employee; //實(shí)現(xiàn)屬性City
  [ Bindable(true), Category("Appearance"), DefaultValue(""), Description("公司所在城市") ]
  public string City {
   get {
    string _city = (String)ViewState["City"];
    return ((_city == null)?String.Empty:_city);
   }
   set { ViewState["City"] = value; }
  } //實(shí)現(xiàn)屬性Employee

  [ Bindable(true), Category("Appearance"), Description("員工信息"), DesignerSerializationVisibility( DesignerSerializationVisibility.Content), NotifyParentProperty(true) ]

  public Employee Employee {
   get {
    if (employee == null) {
     employee = new Employee();
    }
    return employee;
   }
  } // 重寫RenderContents方法,自定義實(shí)現(xiàn)控件呈現(xiàn)

  protected override void RenderContents(HtmlTextWriter output) {
   output.Write("公司所在城市:");
   output.Write(City);
   output.WriteBreak();
   output.Write("姓名:");
   output.Write(Employee.Name.ToString());
   output.WriteBreak();
   output.Write("性別:");
   output.Write(Employee.Sex.ToString());
   output.WriteBreak();
   output.Write("職務(wù):");
   output.Write(Employee.Title.ToString());
  }
 }
}

以上代碼顯示了自定義服務(wù)器控件Company的實(shí)現(xiàn),其中主要包括了一些屬性和RenderContents方法的內(nèi)容。具體屬性包括2個(gè):一個(gè)是簡(jiǎn)單屬性City,另一個(gè)是復(fù)雜屬性Employee。簡(jiǎn)單屬性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;
using System.Collections;
using System.ComponentModel;
using System.Globalization;
using System.Web.UI;
namespace WebControlLibrary{
 public class Employee {
  private string _name;
  private string _sex;
  private string _title; //實(shí)現(xiàn)構(gòu)造函數(shù)1
  public Employee() { } //實(shí)現(xiàn)構(gòu)造函數(shù)2
  public Employee(String Name, String Sex, String Title) {
   _name = Name; _sex = Sex; _title = Title;
  } //實(shí)現(xiàn)屬性Name
  [ Bindable(true), Category("Appearance"), DefaultValue(""), Description("員工姓名"), NotifyParentProperty(true) ]

  public String Name {
   get { return _name; }
   set { _name = value; }
  } //實(shí)現(xiàn)屬性Sex

  [ Bindable(true), Category("Appearance"), DefaultValue(""), Description("員工性別"), NotifyParentProperty(true) ]

  public String Sex {
   get { return _sex; }
   set { _sex = value; }
  } //實(shí)現(xiàn)屬性Title

  [ Bindable(true), Category("Appearance"), DefaultValue(""), Description("員工職務(wù)"), NotifyParentProperty(true) ]

  public String Title {
   get { return _title; }
   set { _title = value; }
  }
 }
}

以上代碼實(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é)

本文通過(guò)一個(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)太大的問(wèn)題。

分享:使用Data Access Application Block 得到存儲(chǔ)過(guò)程的返回值
今天有位朋友問(wèn)我如何在Data Access Application Block中得到存儲(chǔ)的過(guò)程的返回值,我才發(fā)現(xiàn)自己以前寫的文章中確實(shí)沒(méi)提到這方面的問(wèn)題,現(xiàn)在來(lái)補(bǔ)充一下,具體的解決方法如下: 1、首先建立一

來(lái)源:模板無(wú)憂//所屬分類:.Net教程/更新時(shí)間:2008-08-22
相關(guān).Net教程