c# – 从模型元数据中解析元数据displayname?
发布时间:2020-12-16 00:00:24 所属栏目:百科 来源:网络整理
导读:我已经使用附加参数进行了标签扩展,但是当我使用ViewData.ModelMetadata.DisplayName时,我没有从模型上的Diaplsy属性中获取显示名称? 我的模型有这样的用户名 [Display(Name = "User name")] public string UserName { get; set; } 并像这样使用 @Html.Labe
我已经使用附加参数进行了标签扩展,但是当我使用ViewData.ModelMetadata.DisplayName时,我没有从模型上的Diaplsy属性中获取显示名称?
我的模型有这样的用户名 [Display(Name = "User name")] public string UserName { get; set; } 并像这样使用 @Html.LabelFor(m => m.SetupModel.UserName,@<span>No fancy characters mmkay?</span>) 用这个html助手 public static MvcHtmlString LabelFor<TModel,TProperty>(this HtmlHelper<TModel> htmlHelper,Expression<Func<TModel,TProperty>> ex,Func<object,HelperResult> template,string labelText = null) { var htmlFieldName = ExpressionHelper.GetExpressionText(ex); var metadata = htmlHelper.ViewData.ModelMetadata; string resolvedLabelText = labelText ?? metadata.DisplayName ?? metadata.PropertyName ?? htmlFieldName.Split('.').Last(); if (String.IsNullOrEmpty(resolvedLabelText)) { return MvcHtmlString.Empty; } var tag = new TagBuilder("label"); tag.Attributes.Add("for",TagBuilder.CreateSanitizedId(htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(htmlFieldName))); tag.InnerHtml = string.Format( "{0} {1}",resolvedLabelText,template(null).ToHtmlString() ); return MvcHtmlString.Create(tag.ToString()); } 但结果是UserNameNo花哨的人物mmkay?当我认为它应该显示在display属性中设置的名称? 解决方法
我错过了这个事实,当我发布我之前的答案时,你的viewmodel中有不同的对象.以下只是为了说明这个想法,应该有更好的方法来做到这一点.
这是诀窍: var metadata = ModelMetadata.FromLambdaExpression(ex,htmlHelper.ViewData); var resolvedLabelText = labelText ?? metadata.DisplayName ?? metadata.PropertyName ?? htmlFieldName.Split('.').Last(); string resolvedLabelText = ""; if (htmlFieldName.Contains('.')) { var model = htmlFieldName.Split('.'); var metadata = htmlHelper.ViewData.ModelMetadata.Properties.FirstOrDefault(p => p.PropertyName == model[0] ); if (metadata != null) { metadata = metadata.Properties.FirstOrDefault(p => p.PropertyName == model[1]); resolvedLabelText = labelText ?? metadata.DisplayName ?? metadata.PropertyName ?? htmlFieldName.Split('.').Last(); } else resolvedLabelText = labelText ?? metadata.DisplayName ?? metadata.PropertyName ?? htmlFieldName.Split('.').Last(); } else { var metadata = htmlHelper.ViewData.ModelMetadata.Properties.First(p => p.PropertyName == htmlFieldName); resolvedLabelText = labelText ?? metadata.DisplayName ?? metadata.PropertyName ?? htmlFieldName.Split('.').Last(); } 例如,上述内容对SomeObject.SomeObject.Propery不起作用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ruby-on-rails – 在rails中创建一个表并添加外键约束
- c# – 将List>转换为IList>
- ruby-on-rails – 添加一个简单的链接来设置Rails中的布尔字
- 解决oracle11g ORA-00119 ORA-00132方法记录
- Ruby 使用 HTTPS
- C#自定义函数NetxtString生成随机字符串
- TinyXML要点式介绍
- Flash游戏存档文件 .sol文件替换+拷贝教程 附sol Editor下载
- c# – 使用Entity Framework 4填充DropDownList
- ruby-on-rails – 使用active_model_serializers序列化深度