2014-12-07 83 views
4

在MVC5中,通過使用Razor Generator(http://razorgenerator.codeplex.com)這樣的工具,可以在項目之間共享視圖(Razor)。 如何在vNext中實現相同?我的視圖無法識別(包含視圖的項目在project.json中被列爲依賴項)。如何在ASP.NET vNext MVC 6(beta1)項目之間共享視圖?

InvalidOperationException: The partial view '~/Views/Authentication/_LogInForm.cshtml' was not found. The following locations were searched: ~/Views/Authentication/_LogInForm.cshtml

+0

我應該提到它:在源項目中包含「RazorGenerator.Mvc」不再有效(參考在它前面加上「!」)。 – Vincent 2014-12-07 15:08:43

回答

3

我們終於設法解決了這個問題。雖然不太容易...

  1. 您需要將視圖作爲資源嵌入到您將依賴的項目中。爲此,請將"resources": [ "**/*.cshtml" ]添加到其project.json中。

  2. 您需要創建一個可以查看這些資源而不是在磁盤上查找的IFileSystem。這是棘手的部分。我把這個pastbin爲lisibility:http://pastebin.com/aNfq5hNi

  3. 你需要在你的Startup.cs註冊此IFileSystem:

//... public void Configure(IApplicationBuilder app,IHostingEnvironment env,ILoggerFactory loggerfactory) { //Enable use of views in other assemblies IOptions<RazorViewEngineOptions> razorViewEngineOptions=app.ApplicationServices.GetService<IOptions<RazorViewEngineOptions>>(); razorViewEngineOptions.Options.FileSystem=new MVCAsset.EmbeddedExpiringFileInfoCache( razorViewEngineOptions, app.ApplicationServices.GetService<ILibraryManager>() ); //... } //...

注:這是實際測試和MVC6 RC1工作,我沒有測試BETA1。

+0

您是否更新過此代碼以使用MVC6-beta4?由於庫中的更改發生變化,您發佈的部分代碼不再適用。 – 2015-05-13 22:58:14

+0

你有一個測試版5? – 2015-07-15 11:51:37

+0

任何人都看着這個更新的測試版6,7等? – 2015-10-09 19:53:23

2

我不知道如果這有助於外部程序訪問的觀點,但添加這些觀點可以發現,你可以實現IViewLocationExpander這樣的位置:

public class ViewLocationExpander : IViewLocationExpander 
{ 
    public IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations) 
    { 
     var locations = new List<string>(viewLocations); 

     locations.Add("Views/MyOtherViewLocation/{0}.cshtml"); 

     return locations; 
    } 

    public void PopulateValues(ViewLocationExpanderContext context) 
    { 

    } 
} 

在啓動。 cs ConfigureServices方法,加:

 services.Configure<RazorViewEngineOptions>(options => 
     { 
      var expander = new ViewLocationExpander(); 
      options.ViewLocationExpanders.Add(expander); 
     }); 
+0

感謝您的回答,即使它沒有回答問題。我上面發佈了一個有關我自己問題的工作答案。 – Vincent 2015-01-05 16:16:13

+0

是的,您無法使用此解決方案使用web根外部的自定義視圖位置。 – whyleee 2015-06-18 20:13:44