0

私は次のビューモデルを持っています:

public class BudgetTypeSiteRowListViewModel
{
    public virtual int BudgetTypeSiteID { get; set; }
    public virtual string SiteName { get; set; }
    public virtual BudgetTypeEnumViewModel SiteType { get; set; }        
}

次の列挙型で:

public enum BudgetTypeEnumViewModel
{
    [Display(Name = "BudgetTypeDaily", ResourceType = typeof (UserResource))] Daily = 1,
    [Display(Name = "BudgetTypeRevision", ResourceType = typeof (UserResource))] Revision = 2
}

そして、私のアイテムをリストするための次のビュー:

@model IEnumerable<BudgetTypeSiteRowListViewModel>

<table>
    @foreach (var item in Model)
    {
        <tr>
            <td>@Html.DisplayFor(m => item.SiteName)</td>
            <td>@Html.DisplayFor(m => item.SiteType)</td>
        </tr>
    }
</table>

問題は、リストされている私のアイテムが正しい文化にないことです。「Daily」または「Revision」があり、「Journalier」または「Dagelijkse」または「Révision」または「Revisie」が必要です。

(列挙型から提供された)適切なカルチャでSiteTypeを使用するにはどうすればよいですか?

ありがとう。

4

1 に答える 1

0

プロパティの列挙型を取得するには、リフレクションを使用する拡張メソッドを作成する必要があります

public static string DisplayAttribute<TEnum>(this TEnum enumValue) where TEnum : struct
{
  //You can't use a type constraints on the special class Enum. So I use this workaround
  if (!typeof(TEnum).IsEnum)
    throw new ArgumentException("TEnum must be of type System.Enum");

  Type type = typeof(TEnum);
  MemberInfo[] memberInfo = type.GetMember(enumValue.ToString());
  if (memberInfo != null && memberInfo.Length > 0)
  {
    object[] attrs = memberInfo[0].GetCustomAttributes(typeof(DisplayAttribute), false);
    if (attrs != null && attrs.Length > 0)
      return ((DisplayAttribute)attrs[0]).GetName();
  }
  return enumValue.ToString();
}

ビューから、このような値を取得します

@Html.DisplayFor(m => item.SiteType.DisplayAttribute())

お役に立てば幸いです

于 2012-04-21T17:33:29.123 に答える