C#MVC4 Razor-可以使用DisplayNameFor获得不同型号的显示器(名称=..)
本文关键字:显示器 名称 同型 可以使 Razor- DisplayNameFor C#MVC4 | 更新日期: 2023-09-27 18:25:08
当我的视图中有模型时,我可以通过轻松访问成员的DisplayName
@Html.DisplayNameFor(m => m.myMember)
但是,当我需要来自不同模型的成员的DisplayName时,似乎没有简单的解决方案,有些人正在挖掘ModelMetaData或System.ComponentModel.DataAnnotations.DisplayAttribute,但这些都是不容易阅读或理解的多步骤内容。
如果你看一下DisplayNameFor
的定义
DisplayNameFor<TModel, TValue>(
this HtmlHelper<IEnumerable<TModel>> html,
Expression<Func<TModel, TValue>> expression
)
它似乎可以很容易地被这样的东西使用
@Html.DisplayNameFor<MyDifferentModel, string>(?, m => m.memberInMyDifferentModel)
但我不知道其中一个参数TModel是模型,TValue我的成员的类型,表达式m => m.myMember
的东西,但另一个参数是什么?有可能用这种方式使用DisplayNameFor
吗?缺失的部分是什么?
感谢您的任何建议-www和SO上的示例都只处理视图中有模型、视图中有嵌套模型的情况,以及视图中的模型可以直接访问的任何内容,但这不是我想要的。
编辑:
现在我使用这个助手函数来获得显示名称
public string getDisplayName<Type>(string member)
{
var type = typeof(Type);
var memInfo = type.GetMember(member);
var attributes = memInfo[0].GetCustomAttributes(typeof(System.ComponentModel.DataAnnotations.DisplayAttribute), false);
var displayname = ((System.ComponentModel.DataAnnotations.DisplayAttribute)attributes[0]).Name;
return displayname;
}
可以很容易地与一起使用
getDisplayName<MyDifferentModel>("memberInMyDifferentModel");
我只是想知道这个功能是否已经构建在HTML助手DisplayNameFor
中了。。。
经过一些研究。。。似乎你必须创建自己的Html
,所以在之后
var MyHtml = new HtmlHelper<MyDifferentModel>(ViewContext, Html.ViewDataContainer)
在您看来(不知道重用已经实例化的Html
的ViewContext
和ViewDataContainer
是个好主意还是个问题),您可以使用
MyHtml.DisplayNameFor(m => m.memberInMyDifferentModel)
以获取该显示名称。或者如果你想把它放在一行。。。
(new HtmlHelper<MyDifferentModel>(ViewContext, Html.ViewDataContainer)).DisplayNameFor(m => m.memberInMyDifferentModel)
虽然这似乎有效(而且似乎是一个比挖掘注释更干净的解决方案),但我还不明白:为什么你需要创建一个新的Html
,而不能直接使用Html.DisplayNameFor<TModel,TValue>
中的泛型?请评论。。。
尝试使用:
[DisplayName("Sub-Category Name")]
public string subCategoryName { get; set; }
@Html.DisplayNameFor(model => model.subCategoryName)