[英]How can I get ValidationMessageFor to work? C# MVC4 Razor
[英]C# MVC4 Razor - can DisplayNameFor be used to get a Display(Name = …) of a different model?
当我在View中有一个Model时,我可以通过以下方式轻松访问成员的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
是否已内置此功能。
尝试使用:
[DisplayName("Sub-Category Name")]
public string subCategoryName { get; set; }
@Html.DisplayNameFor(model => model.subCategoryName)
经过一番研究……似乎您必须创建自己的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>
使用泛型Html.DisplayNameFor<TModel,TValue>
直接? 请评论 ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.