2011-04-26 82 views
0

我正在寫一個ASP.NET MVC 3網站,我需要一些整數值表示與用戶可讀的字符串狀態轉換數據庫,例如:存儲的數據庫狀態字符串值版本

... 
<td> 
@item.Status 
</td> 
... 

我已經寫了一個HTML助手來完成轉換:

public static string MessageType(this HtmlHelper helper, int type) 
    { 
     string messageType = "Unknown"; 
     switch((Types.MessageTypes)type) 
     { 
      case Types.MessageTypes.Join: 
       messageType = "Join App"; 
       break; 
      case Types.MessageTypes.New: 
       messageType = "New App"; 
       break; 
     } 

     return messageType; 
    } 

而且我將類型作爲枚舉存儲在Types類中。

我的問題是是否有更乾淨的方法來做到這一點?我不喜歡我的代碼中的這些魔術字符串,它在代碼的不同部分創建了許多依賴關係。

有什麼想法?

非常感謝, 山姆

回答

2

我通常用這樣的DisplayAttribute裝飾枚舉。

enum MessageTypes 
    { 
     [Display(Name = "Join App")] 
     Join, 
     [Display(Name = "New App")]  
     New 
    } 

然後我使用一個輔助提取它們:

public static string EnumDisplay(this HtmlHelper helper, Enum model) 
    { 
     var enumType = model.GetType(); 
     var modelValue = Convert.ToInt64(model); 

     var matches = from field in enumType.GetMembers() 
         where field.MemberType == MemberTypes.Field && Enum.IsDefined(enumType, field.Name) 
         let value = Convert.ToInt64(Enum.Parse(enumType, field.Name, false)) 
         where modelValue == value 
         let attribute = field.GetCustomAttributes(typeof (DisplayAttribute), false).Cast<DisplayAttribute>().FirstOrDefault() 
         select attribute == null 
          ? field.Name 
          : attribute.Name; 

     return matches.FirstOrDefault() ?? "Unknown"; 
    } 

然後,你可以做

@Html.EnumDisplay((MessageType)item.MessageType) 
0

在我看來,你應該在數據庫中存儲相應的用戶可讀的字符串旁邊的整數。並返回一個對象,例如StatusViewModel到視圖模型。視圖模型可能有>

class StatusViewModel 
{ 

    int type; 
    string displayMessage; 
} 

有道理?

+0

是對我的缺點是,它需要另一個表來保存該信息是數據庫中不需要 - 它只與UI相關 – 2011-04-27 16:54:17