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

ASP.NET 2.0 自訂伺服器控制項:TypeConverter 類型轉換器完整實作指南

     編輯:關於ASP.NET

類型轉換器負責將設計時的字串屬性值轉換為執行期的強型別物件,反之亦然。ASP.NET 頁面剖析器自動套用標註 [TypeConverter(typeof(MyConverter))] 的屬性。

三類自訂轉換器

類型用途核心方法
值轉換字串 ⇄ 複雜型別 (如 Point、Color、Unit)CanConvertFrom/To、ConvertFrom/To
標準值列表屬性視窗下拉選單 (如列舉、預設尺寸)GetStandardValuesSupported、GetStandardValues
設計時代碼產生產生建構函式初始化碼 (如 new Point(10,20))GetCreateInstanceSupported、CreateInstance

實作值轉換器範例:Point 型別

public class PointConverter : TypeConverter
{
    public override bool CanConvertFrom(ITypeDescriptorContext ctx, Type srcType)
        => srcType == typeof(string) || base.CanConvertFrom(ctx, srcType);

    public override object ConvertFrom(ITypeDescriptorContext ctx, CultureInfo ci, object val)
    {
        if (val is string s)
        {
            string[] parts = s.Split(',');
            return new Point(int.Parse(parts[0]), int.Parse(parts[1]));
        }
        return base.ConvertFrom(ctx, ci, val);
    }

    public override object ConvertTo(ITypeDescriptorContext ctx, CultureInfo ci, object val, Type destType)
    {
        if (destType == typeof(string) && val is Point p)
            return $"{p.X},{p.Y}";
        return base.ConvertTo(ctx, ci, val, destType);
    }
}

// 套用至屬性
[TypeConverter(typeof(PointConverter))]
public Point Location { get; set; }

標準值列表範例

public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext ctx)
    => new StandardValuesCollection(new[] { "Small", "Medium", "Large" });

public override bool GetStandardValuesSupported(ITypeDescriptorContext ctx) => true;
public override bool GetStandardValuesExclusive(ITypeDescriptorContext ctx) => true; // 僅限列表值

善用 TypeConverter 讓自訂控制項屬性在設計工具中擁有原生控制項級的編輯體驗。

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