2010-04-15 120 views
2

我有一個結構,其工作原理非常類似於System.Nullable類型:模型綁定自定義類型

public struct SpecialProperty<T> 
{ 
    public static implicit operator T(SpecialProperty<T> value) 
    { 
     return value.Value; 
    } 
    public static implicit operator SpecialProperty<T>(T value) 
    { 
     return new SpecialProperty<T> { Value = value }; 
    } 

    T internalValue; 
    public T Value { get { return internalValue; } set { internalValue = value; } } 

    public override bool Equals(object other) 
    { 
     return Value.Equals(other); 
    } 
    public override int GetHashCode() 
    { 
     return Value.GetHashCode(); 
    } 
    public override string ToString() 
    { 
     return Value.ToString(); 
    } 

} 

我試圖用ASP.NET MVC結合使用。使用默認的客戶模型綁定器,該屬性將始終爲空。我可以通過在每個表單輸入名稱的末尾添加「.Value」來解決此問題,但我只是希望它使用某種自定義模型綁定器直接綁定到新類型,但我嘗試過的所有解決方案似乎都是不必要的複雜。我覺得我應該能夠擴展默認聯編程序,並用幾行代碼將屬性綁定重定向到使用隱式轉換的整個模型。我沒有完全得到默認綁定器的綁定範例,但它似乎確實卡住了模型和模型屬性之間的區別。什麼是最簡單的方法來做到這一點? 謝謝!

回答

3

找到了答案。我只需要實現一個自定義類型轉換器,並且默認的模型綁定器將其拾取。

+0

祈禱告訴你如何實現這個自定義類型轉換器 – Jonn 2011-10-04 08:13:00

+1

簡單來說,它抓取泛型參數並將值轉換爲該類型,然後使用爲SpecialProperty的新實例的Value屬性創建的值。 – Paul 2011-10-04 15:12:59