Asp.net mvc 4 为什么MVC4不在区域特定视图/Shared/DisplayTemplates文件夹中查看?

Asp.net mvc 4 为什么MVC4不在区域特定视图/Shared/DisplayTemplates文件夹中查看?,asp.net-mvc-4,asp.net-mvc-areas,mvc-editor-templates,display-templates,attributerouting,Asp.net Mvc 4,Asp.net Mvc Areas,Mvc Editor Templates,Display Templates,Attributerouting,尝试将一些代码从MVC3项目移动到MVC4项目,并遇到此问题。一个区域内有一些显示模板,如下所示: MVC Project --Areas ----Identity ------Controllers --------MyHomeController.cs ------Models --------MyHomeViewModel.cs --------MyEmailAddress.cs ------Views --------Shared ----------DisplayTemplates -

尝试将一些代码从MVC3项目移动到MVC4项目,并遇到此问题。一个区域内有一些显示模板,如下所示:

MVC Project
--Areas
----Identity
------Controllers
--------MyHomeController.cs
------Models
--------MyHomeViewModel.cs
--------MyEmailAddress.cs
------Views
--------Shared
----------DisplayTemplates
------------MyEmailAddress.cshtml
----------MyHome.cshtml
--------ViewStart.cshtml
--------Web.config
------IdentityAreaRegistration.cs
MyHomeController有一个返回MyHome.cshtml视图的操作,该视图强类型为MyHomeViewModel。MyHomeViewModel包含IEnumerable属性。在“MyHome.cshtml”文件中,我有以下内容:

@foreach (var email in Model.Emails)
{
    @Html.DisplayFor(m => email)
}
@foreach (var email in Model.Emails)
{
    @Html.DisplayFor(m => email, "MyEmailAddress")
}

@foreach (var email in Model.Emails)
{
    @Html.DisplayFor(m => email, "~/Areas/Identity/[rest of path]/MyEmailAddress.cshtml")
}
但是,这不会呈现MyEmailAddress.cshtml模板。以下两种情况的结果相同:

@foreach (var email in Model.Emails)
{
    @Html.DisplayFor(m => email)
}
@foreach (var email in Model.Emails)
{
    @Html.DisplayFor(m => email, "MyEmailAddress")
}

@foreach (var email in Model.Emails)
{
    @Html.DisplayFor(m => email, "~/Areas/Identity/[rest of path]/MyEmailAddress.cshtml")
}
但是,如果我将MyEmailAddress.cshtml文件移动到根web项目的Views/Shared/DisplayTemplates文件夹中,它将使用此模板进行渲染

出于某种原因,DisplayFor HtmlHelper不是在特定于区域的视图/共享/显示模板文件夹中查找,就是在该文件夹中查找其他内容


我做错了什么?这在MVC3中是有效的,但在MVC4项目中我似乎做不好。

在放弃并发布这个问题后,我又一次立即找到了自己的答案

MyHomeController正在使用。我发现如果我转到URL/Identity/MyHome/Action,就会成功选择DisplayTemplate。然而,对于我的定制路线/my/home,它不是。将以下属性添加到MyHomeController修复了此问题:

[RouteArea("Identity")]
public class MyHomeController : Controller