用剃刀找不到枚举对象

时间:2015-04-25 20:11:25

标签: asp.net-mvc razor enums

我在GetEnumDescription中使用的对象'YogaSpaceAccommodation'似乎是棕色的,没有找到。或者这里的某些内容在语法方面是不正确的。

<div id="AccomodationTypeSelector">
  <select class="form-control" id="SpaceAccommodation" name="YogaSpaceAccommodation">
    <option id="default">0</option>
    @{ 
        var accomodationValues = Enum.GetValues(typeof(YogaSpaceAccommodation)); 
        foreach (var value in accomodationValues) 
        { 
             var index = (int)@value; var description = @EnumHelper.GetEnumDescription
                       <YogaSpaceAccommodation>(@index.ToString()); 
        } 
     }
  </select>
</div>

EnumDescription看起来像这样

public static string GetEnumDescription<T>(string value)
    {
        Type type = typeof(T);
        var name = Enum.GetNames(type).Where(f => f.Equals(value, StringComparison.CurrentCultureIgnoreCase)).Select(d => d).FirstOrDefault();

        if (name == null)
        {
            return string.Empty;
        }
        var field = type.GetField(name);
        var customAttribute = field.GetCustomAttributes(typeof(DescriptionAttribute), false);
        return customAttribute.Length > 0 ? ((DescriptionAttribute)customAttribute[0]).Description : name;
    }

1 个答案:

答案 0 :(得分:0)

找出您的枚举所在的命名空间,并在View的顶部添加using声明。假设您的名称空间为MyApp.Data.Enums,您可以添加:

@using MyApp.Data.Enums

通过@model声明到视图的顶部。您还可以通过位于views文件夹中的web.config添加命名空间:

<system.web.webPages.razor>
  <pages pageBaseType="System.Web.Mvc.WebViewPage">
    <namespaces>
      <add namespace="MyApp.Data.Enums" />
    </namespaces>
  </pages>
</system.web.webPages.razor>

请注意,当您进行这些更改时,通常必须关闭并重新打开intellisense的视图才能赶上。您可能需要正在使用的辅助函数的命名空间。