国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

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

2024-07-10 12:50:23
字體:
供稿:網(wǎng)友

推薦:面向服務及其在互聯(lián)系統(tǒng)策略中的角
面向服務的業(yè)務環(huán)境面向服務是一種創(chuàng)建分布式系統(tǒng)的方法。在它最抽象的層面,面向服務作為一個服務提供程序,包含了一切——從大型機應用程序到打印機到碼頭工作人員到隔夜交貨公

本文詳細講解了一個利用ASP.NET 2.0技術創(chuàng)建復雜屬性的示例。

1、示例應用

本文所實現(xiàn)的示例很簡單,其核心是通過實現(xiàn)自定義服務器控件的連字符形式復雜屬性來說明復雜屬性的實現(xiàn)方法,其中使用了上一篇文章中介紹的內(nèi)容。

頁面顯示了公司所在城市、姓名、性別和職務信息。這些內(nèi)容是定義服務器控件呈現(xiàn)的結果,其中公司所在城市由簡單屬性City設置,姓名、性別和職務由復雜屬性Employee設置,其中包括子屬性Name,Sex和Title設置。下面列舉了示例應用程序的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>實現(xiàn)連字符形式復雜屬性</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>

如上代碼所示,主要設置了@ Register指令和自定義服務器控件Company。前者用于為頁面引入自定義服務器控件Company,從而實現(xiàn)控件在頁面中的應用。在自定義服務器控件Company中主要設置了City、Employee-Name、Employee-Sex和Employee-Title。同時,在開發(fā)人員編碼過程中將會發(fā)現(xiàn),以上4個屬性均為Visual Studio 2005的智能感知功能所支持。

另外,讀者還可以以另一種非連字符形式設置Company控件屬性。具體代碼如下所示:

以下為引用的內(nèi)容:
<Cp:Company ID="Company1" runat="server" City="重慶">
<Employee Name="小李" Sex="男" Title="銷售經(jīng)理">
</Employee>
</Cp:Company>

實際上,以上設置Company控件屬性的方法與前文利用連字符設置屬性的方法是完全一致的。對于所有連字符形式屬性,可以任意使用二者之一。如果是基于代碼可讀性的角度而言,后者比前者的可讀性更強一些。

2、實現(xiàn)方法

上一小節(jié)中的Default.aspx頁面所包含的Company控件具有3個連字符形式復雜屬性。它們是如何實現(xiàn)的呢?實際上,實現(xiàn)這種形式的復雜屬性關鍵是,在自定義服務器控件實現(xiàn)過程中,對復雜屬性及其子屬性設置特定的設計時元數(shù)據(jù)。

對于復雜屬性而言,主要在該屬性實現(xiàn)前設置兩個設計時元數(shù)據(jù):DesignerSerializationVisibility和NotifyParentProperty。DesignerSerializationVisibility用于指定在設計時序列化組件上的屬性時,所使用的持久性類型。NotifyParentProperty可使得屬性瀏覽器中對子屬性的修改通知一直上傳到對象模型,并在被修改了子屬性的控件中產(chǎn)生修改通知。對于子屬性的設計時元數(shù)據(jù)設置比較簡單,只需在子屬性實現(xiàn)前設置一個NotifyParentProperty即可。

實現(xiàn)自定義服務器控件Company涉及兩個文件:Company.cs和Employee.cs。前者是自定義服務器控件的實現(xiàn)主體,其中包括各種屬性設置、控件呈現(xiàn)方法RenderContents等等。后者用于實現(xiàn)復雜屬性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; //實現(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; }
  } //實現(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方法,自定義實現(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("職務:");
   output.Write(Employee.Title.ToString());
  }
 }
}

以上代碼顯示了自定義服務器控件Company的實現(xiàn),其中主要包括了一些屬性和RenderContents方法的內(nèi)容。具體屬性包括2個:一個是簡單屬性City,另一個是復雜屬性Employee。簡單屬性City的實現(xiàn)使用了視圖狀態(tài)ViewState。復雜屬性Employee則有些特別,其類型是一個類Employee。同時,該屬性還設置了兩個元數(shù)據(jù)屬性:DesignerSerializationVisibility(DesignerSerializationVisibility.Content)和NotifyParentProperty(true)。前者可用于指定序列化程序應該序列化屬性的內(nèi)容即子屬性,后者則可使得屬性瀏覽器中對子屬性的修改通知一直上傳到對象模型,并在被修改了子屬性的控件中產(chǎn)生修改通知。以上兩個設計時元數(shù)據(jù)屬性的設置是實現(xiàn)連字符形式復雜屬性的關鍵之一。另一個關鍵之處在于為在實現(xiàn)復雜屬性的子屬性時未其設置元數(shù)據(jù)屬性。

下面列舉了具體實現(xiàn)復雜屬性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; //實現(xiàn)構造函數(shù)1
  public Employee() { } //實現(xiàn)構造函數(shù)2
  public Employee(String Name, String Sex, String Title) {
   _name = Name; _sex = Sex; _title = Title;
  } //實現(xiàn)屬性Name
  [ Bindable(true), Category("Appearance"), DefaultValue(""), Description("員工姓名"), NotifyParentProperty(true) ]

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

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

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

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

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

以上代碼實現(xiàn)了Employee類,其中包括構造函數(shù)和屬性Name、Sex和Title。讀者需要注意,為了實現(xiàn)連字符形式復雜屬性,以上3個屬性都必須設置元數(shù)據(jù)屬性NotifyParentProperty(true)。這樣,當子屬性發(fā)生修改時,.NET框架將自動產(chǎn)生修改通知,并且通知到父屬性Employee。

3、小結

本文通過一個典型示例介紹了創(chuàng)建連字符形式復雜屬性的實現(xiàn)方法。對于其他形式的復雜屬性,例如,內(nèi)部嵌套形式復雜屬性、內(nèi)部嵌套形式默認復雜屬性等,本文將不再做更多解釋。實際上,實現(xiàn)復雜屬性是有其自身規(guī)律可循的。只要讀者能夠按照規(guī)定的方法實現(xiàn),基本上都不會出現(xiàn)太大的問題。

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 历史| 大连市| 洪雅县| 佳木斯市| 连南| 博罗县| 高密市| 连江县| 芒康县| 苏尼特右旗| 汤原县| 洛阳市| 南充市| 丁青县| 新安县| 伊宁市| 紫阳县| 利川市| 休宁县| 乾安县| 蒙自县| 上杭县| 搜索| 镇平县| 普洱| 建平县| 平南县| 延川县| 隆化县| 合水县| 于田县| 阳谷县| 和田市| 徐闻县| 巴彦县| 石嘴山市| 新安县| 舞阳县| 郸城县| 华坪县| 扎赉特旗|