ASP.NET 6 MVC DisplayNameFor()不接受等效表达式?

ekqde3dh  于 2022-11-19  发布在  .NET
关注(0)|答案(1)|浏览(127)

我正在处理一个ASP.NET6MVC项目,在自动生成的CRUD视图中发现了一些我不理解的东西。
对于上下文,我有一个名为“Application”的域模型。我搭建了代码,允许我在索引页面中查看应用程序列表,然后在创建、详细信息、编辑、删除应用程序的页面中查看。默认情况下,生成的代码选择我的域类的IEnumerable作为视图模型。
出于某种原因,这是可行的:

@model IEnumerable<launchpad.Models.Application>

<table>
...
    <th>
       @Html.DisplayNameFor(model => model.AppName)
    </th>
...
</table>

但是,如果我创建一个包含名为Applications的IEnumerable的ViewModel,则此操作不起作用,并出现错误CS1061“IEnumerable不包含AppName的定义..."。

@model launchpad.ViewModels.ApplicationViewModels.ApplicationsViewModel

<table>
...
    <th>
       @Html.DisplayNameFor(model => model.Applications.AppName)
    </th>
...
</table>

我明白为什么第二个例子在原则上不起作用,但我更不明白为什么第一个例子起作用,这不是等价的表达式吗?
作为一个更一般的问题,我 * 应该 * 如何处理这个问题?在ViewModel中访问域模型属性的显示名称的最佳实践是什么?

b1zrtrql

b1zrtrql1#

您可以将鼠标放在model上,检查模型类型,选择方法,然后按F12检查方法定义方式:
第一个视图:

对于第二个视图:


指令集
实际上这两种方法并不相同,第一种方法是pagemodel类型为IEnumerable<T>的扩展方法

相关问题