我正在处理一个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中访问域模型属性的显示名称的最佳实践是什么?
1条答案
按热度按时间b1zrtrql1#
您可以将鼠标放在
model
上,检查模型类型,选择方法,然后按F12检查方法定义方式:第一个视图:
对于第二个视图:
指令集
实际上这两种方法并不相同,第一种方法是pagemodel类型为
IEnumerable<T>
的扩展方法