このプロジェクトを使用して、サイトマップ パスを生成します。
私のアプリケーションでは、サイトマップ パスを次のように維持したいと考えています。
パス: 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
試み
このために、私はの実装を作成しました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.サイトマップ
<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で見つかりましたが、解決策がよくわからないか、私の質問に当てはまりません。とにかく、これが答えなら、ソリューションの実装方法の詳細を教えていただけますか?
ご協力ありがとうございました!