如何@Html.DisplayNameFor() 对列表的基类属性的属性?

Posted

技术标签:

【中文标题】如何@Html.DisplayNameFor() 对列表的基类属性的属性?【英文标题】:How to @Html.DisplayNameFor() on a property of a list’s base class property? 【发布时间】:2016-02-24 16:06:28 【问题描述】:
public class BaseModel 

    public Guid ID;
    public string Name;
    public List<BaseModelChildModel> BaseModelChildModels;


public class BaseModelChildModel

    public double Value;
    public string Notes;
    public BaseModel BaseModel;
    public ChildModel ChildModel;


public class ChildModel

    public Guid ID;
    public string Name;
    public int Productivity;
    public bool IsActive;
 

在cshtml中,在哪里

@model BaseModel
<thead>
    <tr>
        <th>@Html.DisplayNameFor()</th>
    </tr>
</thead>

鉴于BaseModel.BaseModelChildModels 大约一半时间包含0 个元素,如何使@Html.DisplayNameFor() 显示ChildModel.NameChildModel.IsActive 的正确名称? (通过local.resx 获得的正确显示名称,如果有区别的话)

【问题讨论】:

【参考方案1】:

如果您可以将属性更改为IEnumerable&lt;BaseModelChildModel&gt;,那么您应该可以这样做:

@Html.DisplayNameFor(m => m.BaseModelChildModels.Foo)

否则,您可以索引该属性。这里的表达式并不是每个实际访问的,它只是被评估以获得显示名称。因此,如果列表中没有项目,索引属性将不会导致错误,因为它是传统的:

@Html.DisplayNameFor(m => m.BaseModelChildModels[0].Foo)

【讨论】:

所以,换句话说,将NameChildModel 带入BaseModelChildModel?整个事情需要工作的方式是从 BaseModel、BaseModelChildModel 和 ChildModel 访问属性需要同时在 UI 中可用,然后在另一个视图中,它们实际上是倒置的,因此 BaseModelChildModel 实际上是一个在包含附加数据的关系数据库中进行透视。根据您的回复,我认为最好的方法是为视图生成一个新模型,这意味着 T4 模板上的负载更多。 没有。你不需要移动任何东西。 DisplayNameFor 的工作方式是评估表达式以找到它检索显示名称的属性,然后显示该属性。你只需要为它提供一个可以让你到达那里的表达式。唯一的问题是获取BaseModelChildModel 的单个实例,因为集合本身没有您需要使用的属性,即ChildModel.Name。使用IEnumerable,您可以直接从集合中引用该属性,但对于其他任何事情,您都需要单个实例的表达式。 换句话说,如果您的目标是获取ChildModel.Name 的显示名称,并且您正在处理List&lt;BaseModelChildModel&gt;,您只需要像BaseModelChildModels[0].ChildModel.Name 这样的表达式。 谢谢,克里斯。我完全可以使用 IEnumerable,没问题。 所以……当IEnumerable&lt;BaseModelChildModel&gt; BaseModelChildModels,我应该可以做(Model =&gt; Model.BaseModelChildModels.ChildModel.Name)? VS 只是抱怨IEnumerable&lt;BaseModelChildModel&gt; does not have a definition for 'ChildModel' and no extension method。可能遗漏了什么。

以上是关于如何@Html.DisplayNameFor() 对列表的基类属性的属性?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC Bootstrap 动态模态内容

MVC 5 视图中的@model 和 Model 是啥

ByteDance字节跳动张一鸣:如何阅读如何了解自己如何与人沟通沟通如何安排时间如何正确的看待别人意见如何激励自己如何写作如何坚持锻炼身体如何耐心?...

Markdown公式用法大全

shell编程-如何定义函数如何调用函数如何调试shell

[精选] Mysql分表与分库如何拆分,如何设计,如何使用