为什么MVC4没有查看特定于区域的Views / Shared / DisplayTemplates文件夹?

时间:2013-02-04 19:40:21

标签: asp.net-mvc-4 asp.net-mvc-areas mvc-editor-templates display-templates attributerouting

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

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<MyEmailAddress>属性。在“MyHome.cshtml”文件中,我有以下内容:

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

但是,这不会呈现MyEmailAddress.cshtml模板。以下两个结果相同:

@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文件移动到根网站项目的Views/Shared/DisplayTemplates文件夹中,则使用此模板进行渲染。

出于某种原因,DisplayFor HtmlHelper要么没有查看特定于区域的Views / Shared / DisplayTemplates文件夹,要么正在查找该文件夹中的其他内容。

我做错了什么?这适用于MVC3,但我似乎无法在MVC4项目中正确使用它。

1 个答案:

答案 0 :(得分:0)

在放弃并发布此问题之后,我立即立即找到了自己的答案。

MyHomeController正在使用AttributeRouting。我发现,如果我转到了网址/Identity/MyHome/Action,则DisplayTemplate成功被选中。但是对于我的自定义路线/my/home,它不是。将以下属性添加到MyHomeController修复了此问题:

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