首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ModelMetadata获取完整的属性名称

使用ModelMetadata获取完整的属性名称
EN

Stack Overflow用户
提问于 2012-10-07 07:50:43
回答 3查看 5.4K关注 0票数 14

我正在尝试创建一个HtmlHelper,它将创建与Bootstrap兼容的表单字段。我的第一个目标是创建一个HtmlHelper来创建周围的div:

代码语言:javascript
复制
<div class="control-group"> ... </div>

遵循这里和这里的极好的建议,我设法让它相对较快地工作。但它并不总是有效的。

我有一个具有复杂属性的ViewModel,因此在我的表单中我访问字段m=>m.Complex.Element。在我的帮助器中,我检查元素是否存在验证错误。我使用ModelMetadata.FromLambdaExpression(expression, html.ViewData)。我得到的元数据的属性名为Element,而不是Complex.Element

当我检查这个属性的ModelState时,我找不到它,因为ModelState保留了全名- Complex.Element

我可以寻找部分匹配,希望没有其他元素,但这似乎是一个等待发生的令人讨厌的bug。如何从表达式中获取完整的属性名称?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-07 14:12:33

MVC源代码是公开的,这是一件好事。获取ModelState属性名的正确方法是使用

代码语言:javascript
复制
var propertyName = ExpressionHelper.GetExpressionText(expression);
票数 30
EN

Stack Overflow用户

发布于 2012-10-07 08:19:51

我以前使用过以下代码来获取当前模型的属性,您可能需要将属性名称附加到该属性中才能获得该属性。

代码语言:javascript
复制
ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix;

否则,拉出反射器/ilspy/任何东西,并检查您的EditorFor/TextBoxFor或呈现编辑器的任何方法所做的事情。

票数 6
EN

Stack Overflow用户

发布于 2013-09-12 19:42:53

对于我需要的属性,我使用了这两个答案的组合。总而言之,这两个答案都提供了一个我可以在视图和嵌套编辑器模板中使用的工作属性。下面是我的例子:

代码语言:javascript
复制
public static MvcHtmlString HasErrorClassFor<TModel, TProperty>(
    this HtmlHelper<TModel> htmlHelper,
    Expression<Func<TModel, TProperty>> expression)
{
    string expressionText = ExpressionHelper.GetExpressionText(expression);

    string htmlFieldPrefix = htmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix;

    string fullyQualifiedName;

    if (htmlFieldPrefix.Length > 0)
    {
        fullyQualifiedName = string.Join(".", htmlFieldPrefix, expressionText);
    }
    else
    {
        fullyQualifiedName = expressionText;
    }

    bool isValid = htmlHelper.ViewData.ModelState.IsValidField(fullyQualifiedName);

    if (!isValid)
    {
        return MvcHtmlString.Create("has-error");
    }

    return MvcHtmlString.Empty;
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12764890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档