2011-07-06 5 views
0

ASP.NET이 MVC 프로그램의보기 부분에서 걸리도록하려는 재귀 적 데이터 구조가 있습니다. 이것이 가능한지 여부는 분명하지 않습니다. 다음은 C#의 모델 클래스 정의입니다.MVC의 재귀 함수 aspx보기

Public class recursive_data_structure 
{ 
    public List<recursive_data_structure> Children; 
    //some_class is defined elsewhere, it is irrelevant 
    public some_class Me; 
} 

ViewModel에는이 클래스의 인스턴스가 포함되어 있습니다. ASP.NET에서 (MVC를 사용하는) 재귀 HTML 생성을 할 수 있도록 모델을 걷는 방법이 있습니까?

이 질문의 표현이 잘못되었거나 분명한 경우 사과드립니다. 나는 MVC에 아주 익숙하다.

답변

4

계층 적 트리를 렌더링하려고하면 ASP.NET MVC에서이 작업을 수행 할 수있는 방법이 많이 있습니다. 다음과 같이 부분 뷰를 사용할 수 있습니다.

여기

public class HierarchicalModel 
{ 
    public HierarchicalModel() 
    { 
     this.Children = new List<HierarchicalModel>(); 
    } 

    public String Name { get; set; } 
    public List<HierarchicalModel> Children { get; set; } 
} 

당신의 간단한 계층 모델

입니다 다음에 당신이 생성/모델을 가져올하고 viewbag에 넣어 작업 중 하나.

public ActionResult Index() 
{ 
    ViewBag.Message = "Welcome to ASP.NET MVC!"; 

    var level0 = new HierarchicalModel() { Name = "item 0, level 0" }; 
    level0.Children.Add(new HierarchicalModel() { Name = "item 0, level 1" }); 
    level0.Children.Add(new HierarchicalModel() { Name = "item 1, level 1" }); 
    level0.Children.Add(new HierarchicalModel() { Name = "item 2, level 1" }); 
    var level1 = new HierarchicalModel() { Name = "item 3, level 1" }; 
    level1.Children.Add(new HierarchicalModel() { Name = "item 0, level 2" }); 
    level1.Children.Add(new HierarchicalModel() { Name = "item 1, level 2" }); 
    level0.Children.Add(level1); 

    ViewBag.HierarchicalModel = level0; 

    return View(); 
} 

이제 부분보기 (예 : 뷰/공유 디렉토리의 _HierarchicalModel.cshtml 모델이 위치한 네임 스페이스로 MvcApplication4를 대체하십시오.

@model MvcApplication4.HierarchicalModel 
<li> 
    @Model.Name 
    <ul> 
    @foreach (var item in Model.Children) 
    { 
     @Html.Partial("_HierarchicalModel", item); 
    }  
    </ul> 
</li> 

다음보기에서 렌더링합니다.

@{ 
    MvcApplication4.HierarchicalModel model = ViewBag.HierarchicalModel; 
} 

<p> 
    <ul>@Html.Partial("_HierarchicalModel", model)</ul> 
</p> 

이렇게하는 것이 가장 간단한 방법입니다. 어쨌든 순환 참조 및 심층 계층 구조에주의해야합니다.

+0

정확히 MvcApplication4는 무엇을 나타 냅니까? – Peter

+1

프로젝트 이름입니다. 귀하의 경우 모델이 위치한 전체 네임 스페이스로 대체하십시오. 당신은 또한 지침을 사용하여 면도기를 추가 할 수 있습니다 '@ using Your.Namespace; 여기에 대한 자세한 내용을 볼 수 있습니다 [link] http://stackoverflow.com/questions/3239006/how-to-import-a- namespace-in-razor-view-page – aruss

1

내 제한된 지식으로 MVC는 자동으로 재귀 구조를 수행하지 않습니다.

List 또는 IEnumerable에 대한 부분 뷰와 recursive_data_structure에 대한 부분 뷰를 생성하면됩니다.

@foreach (recursive_data_structure child in Model) 
{ 
    @Html.Partial("recursive_data_structureView", child) 
} 

그리고 recursive_data_structure 모델에 대한 부분보기 : IEnumerable을 모델에 대한 부분보기에서

당신은 재귀 데이터를 결합하는 트 리뷰를 원하는 경우
<span>Model</span> 

, Telerik이 하나있다 그들의 무료 MVC 패키지의 일부.