6

ログインや HTML ヘルパーなどと同様に、すべての開発製品で一般的なものを処理する領域を作成しました。領域内には、領域外で参照しようとしている部分的なビューがあります。でエリア登録しました

public class Routes : AreaRegistration
{
    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Common_default",
            "Common/{controller}/{action}/{id}",
            new {
                controller = "Account",
                action = "Index",
                id = UrlParameter.Optional
            });
    }

    public override string AreaName
    {
        get { return "MvcCommons"; }
    }
}

そして今、通常のプロジェクトで、MvcCommons エリアのビューを参照しようとしています...

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<h2>TestGrid</h2>

<% Html.RenderPartial("jQGridTable", ViewData.Model); %>

しかし、ビューが見つからないことがわかり続けています。以前は、MVC Commons プロジェクトの作成中にビュー エラーが発生していましたが、エリア フォルダーと既定のビュー フォルダーの両方が表示されていることがエラーでわかりました。今回は、デフォルトのフォルダーのみを取得しています。これを達成する方法はありますか?

みんな、ありがとう!

4

3 に答える 3

5

私は実際にこれを行う必要はありませんでしたが、推測では、Html.RenderAction()代わりにHtml.RenderAction("action", "controller", new { area = "Area", model = ViewData.Model }).

model をアクションのパラメーターの名前に置き換える必要がありますが、それは機能するはずです。

ただし、これを編集するには、アクションごとにコントローラーとビューのセットアップが必要です。

于 2010-12-08T17:44:48.680 に答える
1

覚えておくべき重要なことは、RenderPartial を使用するときは、現在のアクションのコンテキストで使用することです。

アクションはエリア内にないため、アクションが属するコントローラーの View/ フォルダーのみを検索し、次に共有フォルダーを検索します。

エリアとコントローラー間で共有し、ルートで利用できるビューは、ルートの View/Shared フォルダーにする必要があります。実際、ビューがそのようなパーシャルとして呼び出し可能である場合、それがエリアに属する理由はおそらくほとんどありません。

パーシャルではなくアクションをレンダリングする場合は、領域を呼び出すことができます。これにより、現在のアクションのコンテキストが呼び出し先のアクションに変更され、その領域内でビューを返すことができます。

于 2010-12-08T17:44:31.833 に答える
0

デフォルトのViewEngineは、ユーザーコントロールが参照されているのと同じ領域(またはルート)フォルダー内のビューを検索します。ビューを使用または保存するカスタムの方法を作成する場合は、カスタムのViewEngineを作成することをお勧めします。この例を見てください:カスタムViewEngineを使用してテーマフォルダを実装する

于 2010-12-08T17:06:07.247 に答える