1

一部のコードを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たビューを返すアクションがあります。MyHomeViewModelにはプロパティが含まれています。'MyHome.cshtml'ファイル内には、次のものがあります。MyHome.cshtmlMyHomeViewModelIEnumerable<MyEmailAddress>

@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プロジェクトでは正しく理解できないようです。

4

1 に答える 1

0

この質問をあきらめて投稿した直後に、もう一度自分の答えを見つけました。

AttributeRoutingMyHomeControllerを使用していました。URLにアクセスすると、が正常に選択されていることがわかりました。しかし、私のカスタムルートでは、そうではありませんでした。MyHomeControllerに次の属性を追加すると、これが修正されました。/Identity/MyHome/ActionDisplayTemplate/my/home

[RouteArea("Identity")]
public class MyHomeController : Controller
于 2013-02-04T19:46:57.190 に答える