如何在MVC Core 2.0中使用DisplayTemplates

akd*_*akd 5 display-templates asp.net-core-mvc asp.net-core asp.net-core-mvc-2.0

我曾经DisplayTemplates在MVC5中使用过以摆脱foreach视图循环

如果我有一个ProductDtoProductController

我会放置ProductDto.cshtml

视图/产品/ DisplayTemplates /

要么

视图/共享/ DisplayTemplates /

将模板用于产品列表:我将用foreach以下行替换循环,以使用模板列出所有产品:@Html.DisplayFor(m=>m.Products);

例如,如果我想ProductDto在不同的显示模板中使用相同的模型(),ProductDtoPrintView那么我将Views/Product/DisplayTemplates/使用name 创建另一个模板ProductDtoPrintView.cshtml并传递templateNameas @Html.DisplayFor(m=>m.Products,"ProductDtoPrintView")

但这似乎在MVC Core 2.0中不起作用

我只能为每个模型使用一个模板。而且templateName似乎根本没有任何影响。

我的测试:

什么时候ProductDto.cshtml被放置Views/Product/DisplayTemplates/

如果我只有一个显示模板作为ProductDto模型,那么templateName实际上似乎没有任何影响。它可以使用任何名称或不使用名称。

@Html.DisplayFor(x =>x.Products)-作品 @Html.DisplayFor(x =>x.Products,"")-作品 @Html.DisplayFor(x =>x.Products,"whatever")-作品

但是当我为相同的模型添加另一个显示模板时 ProductDtoPrintView.cshtml

然后事情就有点搞砸了。

@Html.DisplayFor(x =>x.Products) - 作品

@Html.DisplayFor(x =>x.Products,"") - 作品

@Html.DisplayFor(x =>x.Products,"") - 作品

@Html.DisplayFor(x =>x.Product, "ProductDtoPrintView") -无效500内部服务器错误。

@Html.DisplayFor(x =>x.Products, "ProductDto") -不工作-500错误

@Html.DisplayFor(x =>x.Products, "DisplayTemplates/ProductDto")-工作并返回ProductDto.cshtml模板

@Html.DisplayFor(x =>x.Products, "DisplayTemplates/ProductDtoWhatever")-工作并返回ProductDto.cshtml模板

@Html.DisplayFor(x =>x.Products, "DisplayTemplates/ProductDtoPrintView")-工作并返回ProductDto.cshtml模板

基本上,除非删除ProductDto.cshtml文件,否则我无法使ProductDtoPrintView正常工作。

有人遇到同样的问题吗?以及该DisplayTemplate在MVC Core中应如何正常工作?