首页 新闻 会员 周边

如何用Html.HiddenFor 把 Enum 输出为Int32

0
悬赏园豆:10 [已解决问题] 解决于 2010-12-20 09:21

public enum ENUM
{
a
=1,b,c
}


<%=Html.HiddenFor(model=>model.AEnum)%> //这里总是输出字符串

 

请问有办法输出Int32吗?

沉默的糕点的主页 沉默的糕点 | 小虾三级 | 园豆:1786
提问于:2010-12-15 16:43
< >
分享
最佳答案
0

给你个方案参考:重写一个ModelMetadataProvider,具体如下

public class CustomMetadataProvider : DataAnnotationsModelMetadataProvider{    protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName)    {        var metadata = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);        if (modelType == typeof(ENUM))        {            metadata.Model = ((int)((ENUM)metadata.Model)).ToString();        }        return metadata;    }}

 

protected void Application_Start(){    AreaRegistration.RegisterAllAreas();
    RegisterRoutes(RouteTable.Routes);
    ModelMetadataProviders.Current = new CustomMetadataProvider();}

 

经测试,这样至少会影响editfor和hiddenfor,labelfor不受影响。具体原理可以参考一本书:http://www.cnblogs.com/P_Chou/archive/2010/11/01/details-asp-net-mvc-content.html

英文版中第427页开始关于Model Metadata的相关内容

收获园豆:10
P_Chou | 菜鸟二级 |园豆:210 | 2010-12-18 17:31
谢谢,这是我需要的。
沉默的糕点 | 园豆:1786 (小虾三级) | 2010-12-20 09:21
其他回答(1)
0

<%=Html.Hidden("AEnum", (int)Model.AEnum)%>

鹤冲天 | 园豆:2379 (老鸟四级) | 2010-12-15 18:34
难道不能直接输出吗?现在我也是这样做的,attribute name 就和对象结构一致,这样可以自动赋值给entity。我以为HiddenFor会有有什么输出格式设置之类。
支持(0) 反对(0) 沉默的糕点 | 园豆:1786 (小虾三级) | 2010-12-15 22:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册