小编nat*_*hfy的帖子

MVC.net在视图中获取枚举显示名称,而不必在视图中引用枚举类型

我在ViewModelBase类中有以下辅助方法,它由其他视图模型继承:

public string GetEnumName<T>(Enum value)
        {
            Type enumType = typeof(T);
            var enumValue = Enum.GetName(enumType, value);
            MemberInfo member = enumType.GetMember(enumValue)[0];

            var attrs = member.GetCustomAttributes(typeof(DisplayAttribute), false);
            var outString = ((DisplayAttribute)attrs[0]).Name;

            if (((DisplayAttribute)attrs[0]).ResourceType != null)
            {
                outString = ((DisplayAttribute)attrs[0]).GetName();
            }

            return outString;
        }
Run Code Online (Sandbox Code Playgroud)

然后我从这样的视图中调用它:

<p>
@{var rel = Model.GetEnumDisplayName<Enums.wheteverEnum>(Model.wheteverEnum); }
@rel
</p>
Run Code Online (Sandbox Code Playgroud)

问题是 - 我可以使用这种方法,所以我不必告诉它的类型enum吗?基本上我想为所有人做这个enum:

@ Model.GetEnumDisplayName(Model.wheteverEnum)

typeof,不T,不需要Enums在视图中添加对命名空间的引用...

可能?

generics asp.net-mvc enums c#-4.0 asp.net-mvc-3

25
推荐指数
3
解决办法
3万
查看次数

将WebApi.HelpPage添加到webApi项目后的StructureMap异常

我按照这里的说明将webApi.HelpPage区域和视图添加到现有项目,该项目使用structureMap - 但是在访问/ Help url时:

StructureMap Exception Code:  202 No Default Instance defined for PluginFamily System.Web.Http.HttpRouteCollection, System.Web.Http, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Run Code Online (Sandbox Code Playgroud)

所以我在structureMap配置上遗漏了一些东西:

ObjectFactory.Configure(x => x.Scan(scan =>
            {
                scan.TheCallingAssembly();
                scan.AssembliesFromApplicationBaseDirectory();
                scan.AddAllTypesOf<IHttpModule>();
                scan.WithDefaultConventions();
            }));
Run Code Online (Sandbox Code Playgroud)

任何人都可以指向一个structureMap新手正确的方向吗?

c# structuremap asp.net-mvc-4 asp.net-web-api asp.net-web-api-helppages

9
推荐指数
2
解决办法
2311
查看次数