2013-03-04 62 views
1

我有一個帶有屬性的模型,這些屬性以字符串形式引用彼此。例如。屬性接受模型表達式的屬性

public MyModel 
{ 
    [MyAttribute(BindTo = "Foo2")] 
    public string Foo1 { get; set; } 

    public string Foo2 { get; set; } 
} 

這些字段名稱稍後在JavaScript中使用挑海誓山盟出來通過名稱選擇的DOM,但有使用表達式以防止突破選擇屬性名稱更改的方法嗎?在一個更復雜的模型中,它可能被遺忘。

我想實現:

[MyAttribute(BindTo = m => m.Foo2)] 

這可能嗎?我怎麼能實現它?到目前爲止,我處於虧損狀態。

謝謝。

+0

考慮在這種情況下不使用屬性 – LukeHennerley 2013-03-04 16:21:10

回答

1

不,這是不可能的。根據documentation

屬性參數被限制在 以下類型的恆定值:

  • 簡單類型(布爾,字節,字符,短,整型,長整型,浮點和雙)
  • 的System.Type
  • 枚舉
  • 對象(該參數的屬性帕類型的對象ameter必須是上述類型之一的恆定值)的任何上述類型

但你可以做這樣的事情的

  • 一維數組:

    [MyAttribute(BindMethod = "GetBinding")] 
    public string Foo1 { get; set; } 
    
    public Expression GetBinding() 
    { 
        Expression<Func<MyModel, string>> expr = m => m.Foo2; 
        return expr; 
    } 
    
  • +0

    好的謝謝。自從提供文檔引用後接受答案,儘管我不會使用替代解決方案,因爲它只是創建它正在嘗試補救的問題。 – Tim 2013-03-04 17:55:45

    +0

    @Tim是的,我承認這對你的問題並不是一個好的解決方案。只有當屬性指向的函數中的某些複雜邏輯(類似於CustomValidationAttribute類)時,我纔會這樣做。 – 2013-03-04 18:06:48

    2

    這不幸是不可能的。 C#屬性可以接受一組非常有限的值。基本上任何合法的放入C#const的值加上一些數組的擴展。表達式樹lambda不允許作爲屬性參數