首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET 2.0 伺服器控制項複雜屬性實作:連字符語法與巢狀標記雙模式支援完整範例

     編輯:關於ASP.NET

ASP.NET 2.0 自訂伺服器控制項支援複雜屬性(巢狀物件屬性),提供連字符語法(Property-SubProperty)與巢狀標記語法(<Property SubProperty="..." />)雙模式,提升標記可讀性與設計工具體驗。本文以 Company 控制項為例,完整示範 Employee 複雜屬性實作。

範例控制項標記用法

連字符語法

<%@ Register Namespace="WebControlLibrary" Assembly="WebControlLibrary" TagPrefix="Cp" %>
<Cp:Company ID="demo1" runat="server" City="重慶" 
    Employee-Name="小李" Employee-Sex="男" Employee-Title="銷售經理" />

巢狀標記語法(可讀性更佳)

<Cp:Company ID="Company1" runat="server" City="重慶">
  <Employee Name="小李" Sex="男" Title="銷售經理"></Employee>
</Cp:Company>

複雜屬性類別實作

public class EmployeeInfo
{
    public string Name { get; set; }
    public string Sex { get; set; }
    public string Title { get; set; }
}

主控制項實作關鍵點

[ToolboxData("<{0}:Company runat=server>")]
public class Company : WebControl
{
    // 簡單屬性
    public string City { get; set; }

    // 複雜屬性:需標記為 [PersistenceMode(PersistenceMode.InnerProperty)]
    // 並提供預設實例避免 NullReference
    private EmployeeInfo _employee = new EmployeeInfo();
    
    [PersistenceMode(PersistenceMode.InnerProperty)]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    [NotifyParentProperty(true)]
    public EmployeeInfo Employee
    {
        get { return _employee; }
        set { _employee = value ?? new EmployeeInfo(); }
    }

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

關鍵屬性標記解析

屬性作用
[PersistenceMode(PersistenceMode.InnerProperty)]啟用巢狀標記語法,告訴剖析器將子元素對應至此屬性
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]設計工具序列化時輸出子屬性值,而非參考
[NotifyParentProperty(true)]子屬性變更時通知父控制項,觸發設計工具重繪

設計工具智慧感知支援

上述標記使 Visual Studio 2005 設計工具:

  • 屬性視窗顯示 Employee 可展開子屬性 Name、Sex、Title。
  • 原始碼檢視 IntelliSense 提示 Employee-Name、Employee-Sex 連字符語法。
  • 巢狀標記自動完成與驗證。

呈現輸出結果

公司所在城市:重慶
員工姓名:小李
員工性別:男
員工職務:銷售經理

最佳實務建議

  • 複雜屬性類別建議實作 ICloneable 支援深層複製。
  • 提供無參數建構子,確保剖析器能實例化。
  • 避免在 get 存取器中 new 物件,改用欄位預設實例配合 NotifyParentProperty。
  • 大型複雜屬性考慮實作 TypeConverter 支援字串轉換。

雙模式語法支援讓開發者依團隊習慣選擇連字符(精簡)或巢狀標記(清晰),配合設計工具完整體驗,是專業級伺服器控制項的標準配備。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved