2014-04-11 4 views
0

Mvc.sitemap을 사용하여 masterpage에 메뉴를 표시하는 MVC 4 응용 프로그램에서 작업하고 있습니다. 나는 메뉴에서 다른 노드들 사이에서 매번 나타날 "Tasks"라고하는 노드를 가지고있다. 데이터베이스에서 가져온 값을 기반으로이 노드에 대한 자식 노드를 만들어야합니다. 값의 수에 따라 하위 노드가 작성되고 각 하위 코드를 클릭하면 특정 기능이 수행됩니다.MVC에서 노드에 대해 자식 노드를 동적으로 생성합니다. Sitemap

데이터베이스의 값에 따라 자식 노드를 생성하는 방법을 알지 못하므로 Mvc.sitemap에서 노드를 하드 코드했습니다. 당신은 내가 자식 노드를 하드 코딩 또한 url 속성을 지정한 위의 코드에서 볼 수 있듯이

<?xml version="1.0" encoding="utf-8" ?> 
<mvcSiteMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0" 
      xsi:schemaLocation="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0 MvcSiteMapSchema.xsd"> 

    <mvcSiteMapNode title="Home" controller="Home" action="Index"> 
    <mvcSiteMapNode title="Tasks" controller="Home" action="Index"> 
    <mvcSiteMapNode title="Task 1" controller="Home" action="Index" url="http://localhost:...."/> 
    <mvcSiteMapNode title="Task 2" controller="Home" action="Index" url="http://localhost:...."/> 
    </mvcSiteMapNode> 
    <mvcSiteMapNode title="Admin" controller="Home" action="Admin"/> 
    <mvcSiteMapNode title="About" controller="Home" action="About"/> 
    <mvcSiteMapNode title="Help" controller="Home" action="Help"/> 
    </mvcSiteMapNode> 
</mvcSiteMap> 

: 아래는 내가 지금하고있다 방법의 코드입니다.

동적으로 달성하는 방법을 알려주십시오. 미리 감사드립니다 !!

답변

1

이것은 dynamic node providers을위한 것입니다.

<mvcSiteMapNode title="Tasks" controller="Home" action="Index" key="TasksIndex"> 
    <!-- This is the task template node - this node won't be added to the SiteMap, 
    but will be used to define the defaults of the Dynamic Nodes --> 
    <mvcSiteMapNode action="Index" dynamicNodeProvider="MyNamespace.TaskDynamicNodeProvider, MyAssembly" /> 
</mvcSiteMapNode> 


namespace MyNamespace 
{ 
    public class TaskDynamicNodeProvider 
     : DynamicNodeProviderBase 
    { 
     public override IEnumerable<DynamicNode> GetDynamicNodeCollection(ISiteMapNode node) 
     { 
      using (var db = new MyEntities()) 
      { 
       // Create a node for each album 
       foreach (var task in db.Tasks) 
       { 
        var dynamicNode = new DynamicNode(); 
        dynamicNode.Title = task.Name; 
        dynamicNode.ParentKey = "TasksIndex"; 
        dynamicNode.RouteValues.Add("id", task.Id); 

        // NOTE: Controller is automatically inherited in the XML from the 
        // nearest parent node where it is set, and action is set in the 
        // template node in this example. However, you can override the 
        // values here if you need to. 

        // dynamicNode.Controller = "Home"; 
        // dynamicNode.Action = "Index"; 

        yield return dynamicNode; 
       } 
      } 
     } 
    } 
}