Я использую этот проект для генерации пути к карте сайта.
В моем приложении я бы хотел, чтобы путь карты сайта оставался следующим:
Путь: Home > Projects > {project-name}
URL: /projects/{url-project}
Путь: Home > Projects > {project-name} > Photos
URL: /projects/{url-project}/photos
Путь: Home > Projects > {project-name} > Addresses
URL: /projects/{url-project}/addresses
Путь: Home > Projects > {project-name} > Admin
URL: /projects/{url-project}/admin
Attemps
Для этого я создал реализацию DynamicNodeProviderBase
public class ProjectDetailsDynamicNodeProvider : DynamicNodeProviderBase
{
private readonly IProjectRepository _projectRepository;
public ProjectDetailsDynamicNodeProvider()
{
_projectRepository = DependencyResolver.Current.GetService<IProjectRepository>();
}
#region Overrides of DynamicNodeProviderBase
public override IEnumerable<DynamicNode> GetDynamicNodeCollection()
{
// Build value
var returnValue = new List<DynamicNode>();
var listDB = (from p in _projectRepository.Query()
select new { p.Name, p.Keyword, p.Description });
// Create a node for each project
foreach (var project in listDB.ToList())
{
var node = new DynamicNode { Title = project.Name, Description = project.Description };
node.RouteValues.Add("url", project.Keyword);
returnValue.Add(node);
}
// Return
return returnValue;
}
#endregion
}
Mvc.sitemap
<mvcSiteMapNode title="Projects" controller="Project" action="Index">
<mvcSiteMapNode title="New project" controller="Project" action="Create" />
<mvcSiteMapNode title="Project" action="About" controller="Project" dynamicNodeProvider="BindSolution.Infra.ProjectDetailsDynamicNodeProvider, BindSolution">
<mvcSiteMapNode title="Photos" controller="Project" action="Photos" />
<mvcSiteMapNode title="Addresses" controller="Project" action="Addresses" />
<mvcSiteMapNode title="Admin" controller="Project" action="Admin" />
</mvcSiteMapNode>
</mvcSiteMapNode>
Результат
Путь: Home > Projects > {project-name}
URL: /projects/{url-project}
Путь: Project > Photos
URL: /projects/{url-project}/photos
Путь: Project > Addresses
URL: /projects/{url-project}/addresses
Путь: Project > Admin
URL: /projects/{url-project}/admin
Исследования
Глядя в интернете, Я нашел этот вопрос на stackoverflow , но не совсем понимаю разрешение или оно не вписывается в мой вопрос.
Во всяком случае, если это ответ, вы могли бы дать мне более подробную информацию о том, как реализовать решение?
Спасибо всем за помощь!