2

「ダッシュボード」という名前の領域に ViewComponent を保存していますが、この ViewComponent を「アプリケーション」という別の領域で使用したいと考えています。はい、ルート ビュー/共有フォルダーに追加することはできますが、エリアを強力に使用することで、非常にモジュール化されたアプリケーションを作成しようとしています。

ASP.NET 5 RC1 MVC 6 は、他のコンポーネントへのクロス エリア参照をサポートしていないようです。

ビューの場所を追加するにはどうすればよいですか? 追加する必要があります: /Areas/Dashboard/Views/Shared/Components/DashboardMenu/Default.cshtml ビューレンダラーへの検索場所として

InvalidOperationException: The view 'Components/DashboardMenu/Default' was not found. The following locations were searched:
/Areas/Applications/Views/Application/Components/DashboardMenu/Default.cshtml
/Areas/Applications/Views/Shared/Components/DashboardMenu/Default.cshtml
/Views/Shared/Components/DashboardMenu/Default.cshtml.
4

1 に答える 1

2

うまくいった...

Startup.cs

// Add additional razor view engine configuration to facilitate:
// 1. Cross area view path searches
services.Configure<RazorViewEngineOptions>(options =>
{
    options.ViewLocationExpanders.Add(new RazorViewLocationExpander());
});

次に、RazorViewLocationExpander.cs というクラスを作成します。

using Microsoft.AspNet.Mvc.Razor;
using System.Collections.Generic;
using System.Linq;

public class RazorViewLocationExpander : IViewLocationExpander
{
    public void PopulateValues(ViewLocationExpanderContext context) { }

    public IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations)
    {
        List<string> locations = viewLocations.ToList();

        locations.Add("/Areas/dashboard/Views/Shared/{0}.cshtml");

        return locations;
    }
}

これは一般的にはお勧めしません。私はこのソリューションを特別なケースとして使用しています。これは、他の (メンバーのみの) 領域が消費するテンプレートとコア コードを分離するために領域を使用しているためです。したがって、この共有コードの場所を知る必要があります。公開コードを管理コードから分離しようとしていますが、これは私が考えることができる最もクリーンで最もモジュラーなソリューションです。ダッシュボード エリアは、メンバー専用の管理エリアを必要とするすべての Web サイトに表示されます。MVC のルールをわずかに曲げています。

于 2015-12-23T16:11:51.090 に答える