У меня есть структура решения, как это:Правильный способ маршрута к контроллерам в Umbraco ASP.NET/IApplicationEventHander против ApplicationEventHandler против 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». Существует вложенная структура каталогов из-за нескольких веб-сайтов в одной установке, в «Core», а также в каталоге «Views» в экземпляре Umbraco.
Я по-прежнему довольно нобею к .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?
Кроме того, мне нужно жестко закодировать идентификаторы узлов. Я читал, что есть способ динамически? И пример этого будет замечательным.
Примеры наилучшего способа реализации структурированного многоузлового решения Umbraco MVC - это то, о чем я прошу, что касается маршрутизации контроллеров, с некоторыми деталями или ссылками на сильные примеры. Я искал и исследовал, и там есть кусочки, но не очень хороший пример, как то, с чем я работаю. Я собираюсь создать RouteMap для каждой отдельной страницы, которую я создаю на этом этапе, и я не знаю, является ли это наиболее эффективным способом сделать это. Я даже попытался внедрить DefaultController, но не понял, когда ваше решение будет иметь несколько контроллеров.
~ Меня больше всего интересует сохранение моего кода как в примере с каталогом в моем вопросе. Некоторые представления будут иметь пользовательские контроллеры, а некоторые - нет. Я хочу, чтобы все мои модели, контроллеры, помощники, службы и т. Д. Находились в папках под этими конкретными сайтами. Насколько я могу судить, Umbraco не находит эти модели, помощники и т. Д. Без захвата маршрута. Я уже создал тип документа на сайте. Но если я поместил представления в каталоги, Umbraco их не найдет. Если я хочу, чтобы мои взгляды, контроллеры, модели в структуре каталогов по сайту, как мне это сделать? – charlwillia6