2016-06-06 5 views
0

올바른 계층 구조로 채우는 List<TreeViewItemModel>()을 반환하는 컨트롤러에 메서드가 있습니다. 이것은 올바르게 직렬화하는 것으로 보이지만, Treeview를로드 할 때 노드의 첫 번째 레벨 만 계층 구조가 없습니다.원격 데이터에서 부모 및 자식 노드로드

예 :

Treeview

위의 교육 과정의 각이 그 교육 과정 => TreeViewItemModel

에서 갈 때 나는 기본 개체에 대한 항목으로 추가지고 확인한 아래 2/3 시나리오를 가지고

컨트롤러 :

public JsonResult GetAvailableCurricula(string LocationId) 
{ 
    LocationId = "1"; 
    if(LocationId != string.Empty) 
    { 
     var results = Logic.GetFilteredCurriculum().Select(c => CurriculumToTreeView(c)); 
     return Json(results, JsonRequestBehavior.AllowGet); 
    } 
    else 
    { 
     return Json(new List<TreeViewItemModel>(),JsonRequestBehavior.AllowGet); 
    } 
} 

private TreeViewItemModel CurriculumToTreeView(CurriculumModel c) 
{ 
    var tree = new TreeViewItemModel() 
    { 
     Id = c.CurriculumId.ToString(), 
     Text = c.CurriculumName, 
     HasChildren = c.Scenarios.Any() 
    }; 

    if (tree.HasChildren) 
    { 
     tree.Items = c.Scenarios.Select(scenario => 
      new TreeViewItemModel() 
      { 
       Text = scenario.Name,  
      } 
     ).ToList();  
    } 
    return tree; 
} 

보기 :

@(Html.Kendo().TreeView() 
.Name("AvailableCurricula") 
.DataTextField("Text") 
.DataSource(source => source 
    .Read(read => read 
     .Action("GetAvailableCurricula", "TraineeAssignments") 
    .Data("filterAvailableCurricula") 
    ) 
) 

한 번에 하나의 레벨 대신 하위 개체와 부모를 바인딩하는 데 필요한 추가 단계가 있습니까? 나는 자주 데이터를 새로 고침 할 필요가없는 데이터 세트가 상당히 적기 때문에 각 레벨을 개별적으로/필요시로드하지 않는 것이 좋습니다.

{"Enabled":true,"Expanded":false,"Encoded":true,"Selected":false,"Text":"Operator B","SpriteCssClass":null,"Id":"1","Url":null,"ImageUrl":null,"HasChildren":true,"Checked":false,"Items":[{"Enabled":true,"Expanded":false,"Encoded":true,"Selected":false,"Text":"test 2","SpriteCssClass":null,"Id":null,"Url":null,"ImageUrl":null,"HasChildren":false,"Checked":false,"Items":[],"HtmlAttributes":{},"ImageHtmlAttributes":{},"LinkHtmlAttributes":{}},{"Enabled":true,"Expanded":false,"Encoded":true,"Selected":false,"Text":"Scenario II","SpriteCssClass":null,"Id":null,"Url":null,"ImageUrl":null,"HasChildren":false,"Checked":false,"Items":[],"HtmlAttributes":{},"ImageHtmlAttributes":{},"LinkHtmlAttributes":{}}],"HtmlAttributes":{},"ImageHtmlAttributes":{},"LinkHtmlAttributes":{}} 
+0

treeview는 계층 적 데이터 소스를 사용합니다. 직렬화 된 데이터는 어떻게 생겼습니까? – whipdancer

+0

List ()을 Treeview에 반환하고 CurriculumToTreeview 메서드에서 계층 구조를 수동으로 설정하고 있습니다. 나는 그 객체들을 사용하는 또 다른 페이지를 가지고 있으며, 그것은 잘 동작한다. 유일한 차이점은 페이지가 ViewBag에서 가져온 로컬 데이터를 사용하며이 데이터가 원격 데이터를 사용한다는 것입니다. 도움이 될 경우 원시 JSON을 내 게시물에 추가합니다. – Darendal

+0

'TraineeAssignments \ GetAvailableCurricula'를 직접 호출하면 데이터를 가져 옵니까? – whipdancer

답변

-1

내가 트 리뷰의 원격 데이터 옵션은 하위 데이터를로드하는 아약스를 사용한다는 생각 : 그것은 도움이 경우

, 여기 내 교육 과정 중 하나의 컨트롤러에서 보내고있다 원시 JSON의 , 요청시 또는 초기로드시 - LoadOnDemandoption에 의해 제어됩니다.

검도 문서의 remote data examples은 그런 식으로 행동합니다. 이것이 내가 a previous project에 구현 한 방법입니다. 전체 코드 예제에는 트리와 트리가 포함됩니다.

+0

LoadOnDemand (false)를 TreeView에 추가하려고 시도했지만 아무 것도 변경되지 않고 부모 개체 만 표시됩니다. Kendo의 예와 같은 모든 직원 대신 내 개체가 다른 유형, 커리큘럼 및 시나리오이기 때문에 전체 계층 구조를 처음로드 할 수없는 경우 자식 개체에 대해 다른로드 메서드를 적어도 가질 수있는 방법이 있습니다 ? – Darendal

+0

원격 데이터가 함수를 통해로드 될 수 있다는 것을 알고 있습니다. 그러면 적절한 Ajax 호출이 만들어집니다. 내가 어떤 종류의 예를 생각해 낼 수 있는지 (또는 그 방향으로 어떤 것을 실험 할 수 있는지) 알 수 있습니다. – whipdancer