2012-03-12 1 views
1

데이터 구동 메뉴 구조를 사용할 때 사람들이 응용 프로그램의 중첩 된/복잡한 경로를 어떻게 처리하는지 궁금합니다.중첩 된 데이터 중심 메뉴에 대해 복합/중첩 경로가있는 논리적으로 일관된 URL?

내 데이터에 대한 두 개의 클래스를 가지고 구동 메뉴 :

public class List : Entity 
{ 
    public virtual ICollection<ListItem> ListItems { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public ListType ListType { get; set; } 

    public string UlTagCssClass { get; set; } 
    public string UlTagCssID { get; set; } 
} 

public class ListItem : Entity 
{ 
    public virtual List List { get; set; } 
    public virtual ListItem ParentItem { get; set; } 
    public virtual ICollection<ListItem> ChildItems { get; set; } 

    public int SortOrder { get; set; } 
    public string Text { get; set; } 
    public string Controller { get; set; } 
    public string Action { get; set; } 
    public string Url { get; set; } 
} 

나는 그 (메뉴로 사용) 중첩 ul 태그에있는 목록을 뱉어 재귀 함수가 있습니다. 현재로 서서 ListItem은 곧장 전체 URL을 통해 URL을 가질 수 있으며, 컨트롤러와 동작을 제공하거나 전혀 링크가 될 수 없습니다.

그러나 URL이 메뉴의 계층 구조와 일치하지 않는 문제가 있습니다. 이는 꽤 일반적인 관행이며 대부분의 사람들이 기대할 수 있습니다.

그래서 예를 들어 나는 같은 메뉴 계층 구조를 가지고 :

  • 소개
  • 연락
    • 부서
      • 인적 자원
      • 판매

이제 최상위 항목 Contact.Controller = "Contact"입니다. 하위 항목이 Departments이고 .Controller = "Content", .Action = "Departments"입니다. www.domain.com/Contact/Departments로 연결되는 링크입니다. 하지만 내 세 번째 레벨 항목 Sales에는 이제 .Controller = "Departments, .Action = "Sales"이 있습니다. 이렇게하면 www.domain.com/Departments/Sales 링크가 만들어지며 이는 메뉴의 계층 구조에서 의미가 없습니다.

적절한 URL을 저장하고이를 지원하는 경로를 생성하는 좋은 방법은 무엇입니까? (필요한 경우 ListItem 클래스를 변경할 수 있습니까?) 또한 이러한 시나리오에서 어떻게 자신의 뷰/컨트롤러를 구조화할까요? 내가 하드 코드 된 MVC 어플리케이션을 개발했거나 기본 컨트롤러/액션 경로 인 을 사용했지만 지금은 더 많은 데이터 중심적으로 만들려고 노력하면서 점점 더 심화되는 과정을 계속하는 방법을 모르겠습니다..

답변

1

은 다음과 같은 경로를 추가하고 기본 경로 전에 추가

동적이 당신의 메뉴 목록에서 당겨 아래로 목록을 반복하여 응용 프로그램 실행에 매핑합니다. 당신은 가능성이 동적으로

routes.MapRoute("Contact", "Contact/{action}", 
       new { controller = "Contact"}); 
routes.MapRoute("Departments", "Contact/Departments/{action}", 
       new { controller = "Departments"}); 
+0

그냥 내가 올바르게 이해 생성하지 않는 난 당신이 (등 뷰) 지원 파일을 필요로 그들이 즉시 에 변경하지 않는 동적으로이지도를하지 않으려는 것, 내가 필요 기본적으로 동일한 뷰에 두 개의 동작을 지시하면 안됩니까? Contact 컨트롤러의 Departments 액션은 Departments 컨트롤러의 Index 액션과 같은 페이지를 가리 키기 때문에? 어떻게 이러한 경로를 동적으로 생성 하시겠습니까? – SventoryMang

+0

전화가 잘되었으므로 기본 동작을 제공하지 않아야합니다. 그렇지 않으면이 경로를 사용하지 않아야합니다. 내 대답이 조금 업데이트됩니다. –

관련 문제