2012-11-07 22 views
1

我使用從數據庫例如DisplayText加載數據: 繼續代碼:的EntityFramework 5.0變量數據註釋

public class AtributosInModels : DisplayNameAttribute 
{ 
    string displayName; 
    private static int lenght; 

    public static int Lenght 
    { 
     get { return lenght; } 
     set { lenght = value; } 
    } 

    vw_UsuarioPerfilAtributoRepository vw_usuarioPerfilAtributoRepository = new vw_UsuarioPerfilAtributoRepository(); 

    public AtributosInModels(string key) 
    { 

     _key = key; 

    } 

    public override string DisplayName 
    { 
     get 
     { 
      Func<vw_UsuarioPerfilAtributo, bool> expressionPerfil = Perf => Perf.NomeAtributo == _key; 
      var entity = vw_usuarioPerfilAtributoRepository.GetSingle(expressionPerfil); 

      if (entity.Tamanho!=null) 
      lenght = entity.Tamanho.Value; 

      try { displayName = entity.NomeLabel; } 
      catch (Exception) { displayName = null; } 
      return string.IsNullOrEmpty(_key) ? "" : displayName; 
     } 
    } 



    public string _key { get; set; } 
} 

}

[AtributosInModels("NomeUsuario")] 
    [MaxLength(AtributosInModels.Lenght)] 
    public string NomeUsuario { get; set; } 

如果代碼是凌亂的,我把全**

現在我想從數據庫加載長度,數據類型,權限,DisplayFormat。 但類模型`噸操縱變量,我試圖使用靜態方法

[MaxLength(AtributosInModels.Lenght)] 

錯誤5的屬性參數必須是常量表達式,屬性參數類型的typeof運算表達式或數組創建表達式

失敗。

回答

0

在編譯時必須知道屬性參數。因此它必須是一個不變的價值。

+0

因此,任何建議使用MVC4最大長度? –

+0

我不是100%確定你在做什麼,使用這個屬性的原因是什麼 - 是否用於驗證?你想如何驗證它?手動或通過內置機制驗證(例如EF驗證)。如果這是後者,則可以使用CustomValidationAttribute並將動態邏輯放在此處。我不完全掌握的是爲什麼NomeUsuario可以有不同的力量。請注意,我不是MVC專家,因此可能會漏掉一些明顯的東西。 – Pawel

+0

這是因爲我的系統可以從數據庫加載所有的信息,所以任何出現在屏幕瀏覽器上的東西都寫在數據庫中,即使是相同的模型css也是這樣工作的,以便客戶在任何時候想要改變任何東西友好的界面和簡單(翻譯,適應任何商業,維護)。雖然在字符串長度中可能看起來有點無用,但對於各種其他數據註釋來說,它同樣適用。 –