2012-10-16 32 views
17

我試圖使用單獨項目中的區域創建簡單的概念證明ASP.NET MVC 4網站。ASP.NET MVC 4單獨項目中的區域無法正常工作(查看未找到)

我嘗試了以下教程:http://bob.archer.net/content/aspnet-mvc3-areas-separate-projects(應用程序在虛擬目錄中不起作用...我使用IIS)。我希望有比虛擬目錄更好的方法。

然後我嘗試本教程:http://forums.asp.net/t/1483660.aspx/1 但在區域項目的* .csproj的沒有「AreasManifestDir」元素(和遇到錯誤「視圖‘索引’或找不到它的主人還是沒有視圖引擎支持搜索位置「)

是否仍然支持ASP.NET MVC 4?因爲我發現這個答案,它可以在將來被刪除:What are the pros and cons of Areas implemented as single projects vs multiple projects in asp.net mvc

我還沒有找到任何如何爲MVC4。溶液

結構簡單:

管理項目的
Solution 'MvcAreasMultiProject' 
    Areas [Directory] 
     Admin [Project] 
     Models 
     Views 
     Controllers 
     Routes.cs [Examples] 
    MvcAreasMultiProject [MainProject] 
     - References Admin project 
     M.V.C 

Routes.cs:

namespace Admin 
{ 
public class Routes : AreaRegistration 
{ 
    public override string AreaName { get { return "Admin"; } } 

    public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Admin_Default", 
      "Admin/{action}/{id}", 
      new { controller = "Admin", action = "Index", id = "" }, 
      new[] { "Admin.Controllers" } 
     ); 
    } 
} 
} 

感謝您的幫助!

+0

http://elegantcode.com/2012/04/06/mvc-portable-areas/ – user960567

回答

25

您可以使用RazorGenerator包將您的Razor視圖嵌入到單獨的程序集中。下面是使這項工作的步驟:

  1. 安裝Razor Generator的Visual Studio擴展(工具 - >擴展和更新...)
  2. 創建一個使用空模板創建一個新的ASP.NET MVC應用4。
  3. 一個新的類庫項目添加到名爲AreasLibrary解決方案(你也可以使用一個ASP.NET MVC項目模板,以便在剃刀的觀點得到智能感知)
  4. 安裝RazorGenerator.Mvc的NuGet到AreasLibrary項目。
  5. 添加AreasLibrary項目內的控制器(~/Areas/Admin/Controllers/HomeController.cs):

    public class HomeController: Controller 
    { 
        public ActionResult Index() 
        { 
         return View(); 
        } 
    } 
    
  6. 添加相應的視圖(~/Areas/Admin/Views/Home/Index.cshtml):

    @* Generator: MvcView *@ 
    
    @{ 
        Layout = null; 
    } 
    
    <!DOCTYPE html> 
    
    <html> 
    <head> 
        <meta name="viewport" content="width=device-width" /> 
        <title>View1</title> 
    </head> 
    <body> 
        <div> 
         Index view   
        </div> 
    </body> 
    </html> 
    
  7. 在視圖的屬性中設置的Custom ToolRazorGenerator

  8. 裏面的類庫添加~/Areas/AdminAreaRegistration.cs

    public class AdminAreaRegistration : AreaRegistration 
    { 
        public override string AreaName { get { return "Admin"; } } 
    
        public override void RegisterArea(AreaRegistrationContext context) 
        { 
         context.MapRoute(
          "Admin_Default", 
          "Admin/{action}/{id}", 
          new { controller = "Home", action = "Index", id = "" } 
         ); 
        } 
    } 
    
  9. 所有剩下的就是引用類庫在主MVC應用程序。

參考:http://blog.davidebbo.com/2011/06/precompile-your-mvc-views-using.html

+1

也許有點不同的回答我的問題,但正確的解決方案。我想爲每個區域製作不同的項目。所以步驟1-4是正確的。 **不需要創建一個包含所有區域的項目,但是將模型+視圖+控制器直接添加到分離的項目中更簡單**。感謝您的幫助 - 使用RazorGenerator是解決方案。 – Tomino

+0

不,區域不是必需的,但任何MVC開發人員都應該理解區域以及如何使用它們來更好地組織事物 – xximjasonxx

+0

@ darin-dimitrov - 假設我不想將類庫引用添加到主MVC應用程序,已經在上面的步驟9中進行了描述,而是動態地「發現」了我的MVC區域類庫。有沒有辦法做到這一點?我試過使用Assembly.LoadFrom()來完成這個任務,但是我似乎從未能夠找到視圖。謝謝! – Rockdocta

相關問題