加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – 无法在MVC3 HTML Helper中获取自定义属性值

发布时间:2020-12-16 03:37:26 所属栏目:asp.Net 来源:网络整理
导读:我用一个需要来自模型属性的属性值的方法扩展了 HTML帮助器.所以我已经定义了一个自定义属性. public class ChangeLogFieldAttribute : Attribute { public string FieldName { get; set; } } 在我的模型中使用它就像这样. [Display(Name = "Style")] [Chang
我用一个需要来自模型属性的属性值的方法扩展了 HTML帮助器.所以我已经定义了一个自定义属性.

public class ChangeLogFieldAttribute : Attribute {
        public string FieldName { get; set; }
    }

在我的模型中使用它就像这样.

[Display(Name = "Style")]
    [ChangeLogField(FieldName = "styleid")]
    public string Style { get; set; }

在我的帮助方法中,如果属性用于属性,我有以下代码来获取属性的FieldName值.

var itemName = ((MemberExpression)ex.Body).Member.Name;

        var containerType = html.ViewData.ModelMetadata.ContainerType;
        var attribute = ((ChangeLogFieldAttribute[])containerType.GetProperty(html.ViewData.ModelMetadata.PropertyName).GetCustomAttributes(typeof(ChangeLogFieldAttribute),false)).FirstOrDefault();
        if (attribute != null) {
            itemName = attribute.FieldName;
        }

但是,当我到达此代码时,我得到一个异常,因为containerType为null.

我不确定我是否正在做任何正确的事,但是我从大约4个不同的来源中取得了这一点.如果您可以建议解决我的问题或替代方案,我将不胜感激.

谢谢.

更新解决方案

我使用了Darin Dimitrov的解决方案,虽然我不得不调整它.这是我添加的内容.我必须检查属性metatdata的存在,一切都很好.

var fieldName = ((MemberExpression)ex.Body).Member.Name;

        var metadata = ModelMetadata.FromLambdaExpression(ex,html.ViewData);
        if (metadata.AdditionalValues.ContainsKey("fieldName")) { 
            fieldName = (string)metadata.AdditionalValues["fieldName"];
        }

解决方法

您可以使属性元数据识别:

public class ChangeLogFieldAttribute : Attribute,IMetadataAware
{
    public string FieldName { get; set; }

    public void OnMetadataCreated(ModelMetadata metadata)
    {
        metadata.AdditionalValues["fieldName"] = FieldName;
    }
}

然后在助手里面:

var metadata = ModelMetadata.FromLambdaExpression(ex,htmlHelper.ViewData);
var fieldName = metadata.AdditionalValues["fieldName"];

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读