我有一個解決方案的結構是這樣的:有道路線在一把umbraco ASP.NET/IApplicationEventHander VS ApplicationEventHandler VS RouteConfig.cs,RenderMvcController等控制器
MyApp.Core
--Properties
--References
--bin
--Events
|EventHandlers.cs
--Directory
--Controllers
|DirectoryController.cs
--Helpers
|ContextHelpers.cs
--Models
|DirectoryModel.cs
--AnotherSite
--Controllers
--Helpers
--Models
--Services
--Shared
--Controllers
|HomePageController.cs
--Helpers
|Extensions.cs
|app.config
|packages.config
MyApp.Umbraco
--Properties
--References
--bin
etc........
--Views
--Directory
--Partials
|DirectoryFilters.cshtml
|DirectoryBase.cshtml
|DirectoryHome.cshtml
|FDirectory.cshtml
|SDirectory.cshtml
--Partials
--Shared
|Base.cshtml
|Web.config
etc........
我一把umbraco實例使用從模型和控制器我「核心」項目。有一個嵌套的目錄結構,因爲在一個安裝中的多個網站,在「Core」中,以及在Umbraco實例的「Views」目錄中。
我對.NET MVC還是相當不熟悉的,而且我理解路由劫持,但Umbraco路由的文檔很渺茫。我有以下幾點:
EventHandlers.cs
namespace MyApp.Core.Events
{
/// <summary>
/// Registers site specific Umbraco application event handlers
/// </summary>
public class MyAppStartupHandler : IApplicationEventHandler
{
public void OnApplicationInitialized(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{
}
public void OnApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{
RegisterCustomRoutes();
}
public void OnApplicationStarting(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{
}
private static void RegisterCustomRoutes()
{
// Custom Routes
RouteTable.Routes.MapUmbracoRoute(
"FDirectory",
"fdirectory/{id}",
new
{
controller = "Directory",
action = "FDirectory",
id = UrlParameter.Optional
},
new PublishedPageRouteHandler(1000));
RouteTable.Routes.MapUmbracoRoute(
"SDirectory",
"sdirectory/{id}",
new
{
controller = "Directory",
action = "SDirectory",
id = UrlParameter.Optional
},
new PublishedPageRouteHandler(1001));
RouteTable.Routes.MapUmbracoRoute(
"HomePage",
"",
new
{
controller = "HomePage",
action = "Index",
id = UrlParameter.Optional
},
new PublishedPageRouteHandler(1002));
}
}
public class PublishedPageRouteHandler : UmbracoVirtualNodeRouteHandler
{
private readonly int _pageId;
public PublishedPageRouteHandler(int pageId)
{
_pageId = pageId;
}
protected override IPublishedContent FindContent(RequestContext requestContext, UmbracoContext umbracoContext)
{
if (umbracoContext != null)
{
umbracoContext = ContextHelpers.EnsureUmbracoContext();
}
var helper = new UmbracoHelper(UmbracoContext.Current);
return helper.TypedContent(_pageId);
}
}
}
DirectoryController.cs
namespace MyApp.Core.Directory.Controllers
{
public class DirectoryController : RenderMvcController
{
public DirectoryController() : this(UmbracoContext.Current) { }
public DirectoryController(UmbracoContext umbracoContext) : base(umbracoContext) { }
public ActionResult FDirectory(RenderModel model)
{
return CurrentTemplate(new DirectoryModel(model.Content));
}
public ActionResult SDirectory(RenderModel model)
{
return CurrentTemplate(new DirectoryModel(model.Content));
}
}
}
所以一把umbraco不以App_Start
文件夾中安裝。我想知道什麼是最好的方法是多點安裝Umbraco註冊路由到控制器。我的實現有效,但似乎我不應該爲每個控制器中的每個頁面創建操作。我知道Umbraco有它自己的路由,所以使用Umbraco概念,ASP.NET MVC概念以及其他任何可用的東西,實現這種類型的解決方案結構的最佳方式是什麼?我是否應該擔心使用RouteConfig.cs並創建App_Start目錄?或者我正在做最好的方法?我應該使用IApplicationEventHandler還是ApplicationEventHandler?
另外,我必須對節點ID進行硬編碼。我讀過有動態的方法嗎?這個例子會很棒。
實現結構化多站點Umbraco MVC解決方案的最佳方式的例子就是我所要求的,關於路由控制器,一些細節或者強示例的鏈接。我已經搜索和研究,並且有一些零碎的東西,但並不是一個很好的例子,就像我正在使用的東西。我將不得不爲這個時候創建的每一個頁面創建一個RouteMap,我不知道這是否是最有效的方法。我甚至嘗試過實現一個DefaultController,但是當你的解決方案有多個控制器時沒有看到這一點。
〜我最關心的是讓我的代碼像我的問題中的目錄示例一樣組織。一些視圖會有自定義控制器,有些則不會。我希望我的所有模型,控制器,幫助器,服務等都位於這些特定站點下的文件夾中。就我所見,Umbraco沒有發現那些模型,幫手等,沒有路由劫持。我已經創建了一個網站文檔類型。但是如果我把目錄放在目錄中,Umbraco就不會找到它們。如果我希望我的視圖,控制器,站點中的目錄結構中的模型,我將如何做到這一點? – charlwillia6