2

2 つのエリアを持つプロジェクトを考えてみましょう。

/エリア/ブログ /エリア/ダッシュボード

ここで、ブログ エリアに SpecialBlog タイプのエディターがあるとします。/エリア/ブログ/ビュー/ブログ/EditorTemplates/SpecialBlog.ascx

ダッシュボード エリアの一部であるビューに特別なブログを表示したい場合はどうすればよいですか?

次のコードは、「ブログ」エリア内のビューから機能しますが、「ダッシュボード」エリアからは機能しません。

Html.EditorFor (model => model)  // model is type SpecialBlog

パスを提供しても失敗し、

Html.EditorFor (model => model, "~/Areas/Blog/Views/Blog/EditorTemplates/SpecialBlog.ascx")

私が仕事を得ることができる唯一のことは

Html.RenderPartial (Model, "~/Areas/Blog/Views/Blog/EditorTemplates/SpecialBlog.ascx");

しかし、SpecialBlog 内のルーティングは失敗します。(つまり、ブログ エリア内の他のエディター テンプレートへの独自の Html.EditorFor 呼び出しがあります)。

私は根本的に間違ったことをしていますか?

4

2 に答える 2

0

私は同じ問題を抱えていました。以下を使用したかったのです

~/Areas/ActivityPicker/Views/ActivityPicker/EditorTemplates/ActivityPicker.cshtml

これは福音とはかけ離れていますが、これを行うことはできないと思います (MVC 5)。私が試してデバッグしたところ、以下になりました。

"EditorTemplates/~/Areas/ActivityPicker/Views/ActivityPicker/EditorTemplates/ActivityPicker.cshtml"

つまり、最初に EditorTemplates を追加しました。

次に、これを見つけるために通常の場所、つまり、ビューとそのすぐ近くのエリアのビュー + エディター テンプレートを検索しました。これは、'~' で始まらないため、すべての場所をチェックするわけではなく、共通のビューと現在のエリアのみをチェックします。 (VirtualPathProviderViewEngine::IsSpecificPath で確認してください)

また、'~' を '../' に置き換えても役に立ちません。つまり、次のようなことはできません。

"EditorTemplates/../../../Areas/ActivityPicker/Views/ActivityPicker/EditorTemplates/ActivityPicker.cshtml"

同じ理由で

これが機能したとしても、次のリリースで壊れる可能性のある副作用について返信することになるので、私はやりたくありません

要約すると、現時点ではできないと思いますが、私には制限のように思われるので、別の方法で教えていただければ幸いです. ページに同じビューの複数のインスタンスが必要です。これにはエディター テンプレートが推奨されますが、異なる領域間でそれらを使用することはできません

于 2014-12-01T14:31:19.123 に答える
0

これを共有フォルダに入れるとうまくいくと思います。

メインの /shared フォルダーに配置したくない場合は、ViewEngine に別のパスを設定してみてください (Application_start に追加するか、使用しているパスから派生させます)、/areas/shared フォルダー (このつまり、すべての領域のフォルダーを作成し、そこにテンプレートを配置します。

于 2011-02-21T10:35:30.950 に答える