首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Access视图模型需要代码- MVC中资源文件中的错误消息数据注释

Access视图模型需要代码- MVC中资源文件中的错误消息数据注释
EN

Stack Overflow用户
提问于 2015-09-30 08:27:16
回答 1查看 916关注 0票数 0

我试图从代码中访问ErrorMessageString,以获得基于用户语言的相应消息,但我遇到了一些困难。

在我的viewModel中,我有这样的内容:

代码语言:javascript
复制
    [Required(ErrorMessageResourceType = typeof(Resource), ErrorMessageResourceName = "UserFirstNameReq")]
    [Display(Name = "UserFirstName", ResourceType = typeof(Resource))]
    public string FirstName { get; set; }

从英文资源文件UserFirstNameReq = name是必需的。(这将根据用户语言选择而改变,对于德语,这将是Vorname ist erforderlich。)

现在我有了这段代码,在这里我想访问已翻译的消息,但是ErrorMessageString是不可访问的。我怎样才能得到这个价值?

代码语言:javascript
复制
public static MvcHtmlString ExtendedTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,Expression<Func<TModel, TProperty>> expression, object htmlAttributes)
    {
        var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);

        //If input is required in ViewModel, attach required and validation message
        if (metadata.IsRequired)
        {
            string errorAtribute = GetErrorMessage(metadata);

            return InputExtensions.TextBoxFor<TModel, TProperty>(htmlHelper, expression, (string) null, output);
        }

        return InputExtensions.TextBoxFor<TModel, TProperty>(htmlHelper, expression, (string) null, htmlAttributes);
    }

    private static string GetErrorMessage(ModelMetadata metadata)
    {
        string retVal = String.Empty;

        var customTypeDescriptor = new AssociatedMetadataTypeTypeDescriptionProvider(metadata.ContainerType).GetTypeDescriptor(metadata.ContainerType);
        if (customTypeDescriptor != null)
        {
            var descriptor = customTypeDescriptor.GetProperties().Find(metadata.PropertyName, true);
            var req = (new List<Attribute>(descriptor.Attributes.OfType<Attribute>())).OfType<RequiredAttribute>().FirstOrDefault();

            if (req != null)
            {
                retVal = req.ErrorMessage;

                //Here instead of ErrorMessage i need ErrorMessageString
            }

        }

        return retVal;
     }

以下是我需要但无法访问的截图:

任何帮助都是非常感谢的。谢谢您抽时间见我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-30 08:39:10

如果使用反射不是问题,请尝试使用

代码语言:javascript
复制
retVal =  (string)req.GetType().GetProperty("ErrorMessageString", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).GetValue(req);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32861357

复制
相关文章

相似问题

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