繁体   English   中英

C#MVC4剃刀-可以使用DisplayNameFor获得其他模型的Display(Name =…)吗?

[英]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时 ,似乎没有简单的解决方案,其中有些是在ModelMetaDataSystem.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)

在您的视图中(不知道重用已实例化的HtmlViewContextViewDataContainer是一个好主意还是一个问题),您可以使用

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM