尝试将一些代码从 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
文件移动到根 Web 项目的Views/Shared/DisplayTemplates
文件夹中,它会使用此模板进行渲染。
出于某种原因,DisplayFor HtmlHelper 要么不在特定区域的 Views/Shared/DisplayTemplates 文件夹中查找,要么在该文件夹中查找其他内容。
我究竟做错了什么?这适用于 MVC3,但我似乎无法在 MVC4 项目中正确使用它。