TreeView
위젯의 내부 동작을 이해하는 데 어려움이 있습니다. 나는 Kendo code library example를 참조하고, 특히 아약스 로딩 조각은 :Kendo UI Treeview XML에 데이터 바인딩 : "id"에 어떻게 바인딩됩니까?
public class Employee
{
public int id { get; set; }
public string name { get; set; }
public bool hasChildren { get; set; }
public List<Employee> items { get; set; }
}
보기는 다음과 같은 코드를 실행합니다 :
//Ajax binding data
public JsonResult Employees(string id)
{
XElement element = XElement.Load((Server.MapPath("~/App_Data/employees.xml")));
IEnumerable<Employee> result;
if (!string.IsNullOrEmpty(id))
{
//search for id and return it's children
result = FindByID(id, element.Element("Employee")).Element("items").Elements("Employee").Select(e => ToEmployee(e));
}
else
{
//return first level nodes
result = element.Elements("Employee").Select(e => ToEmployee(e)) ;
}
return Json(result, JsonRequestBehavior.AllowGet);
}
//Find the XML element by Id
private XElement FindByID(string id, XElement element)
{...}
//Convert XML element to Object
private Employee ToEmployee(XElement element)
{
return new Employee()
{
id = int.Parse(element.Element("employeeId").Value),
name = element.Element("name").Value,
hasChildren = element.Element("items") != null
};
}
이 실제 XML 구조에 해당하는 사용되는 모델이며,
@(Html.Kendo().TreeView()
.Name("ajaxTree")
.DataTextField("name")
.DataSource(source =>
{
source.Read(read =>
{
read.Action("Employees", "Home");
});
})
)
나를 괴롭히는 것은 모델이이 예제 에서처럼 정확히 구현되어야한다는 사실입니다. 특히 "id"및 "hasChildren"속성은이 방식으로 정확하게 지정해야합니다. 예를 들어, "id"를 "Id"로 수정하면이 예제가 효과적이지 않고 TreeView
이로드되지 않습니다. 누군가 다음과 같이 나를 도울 수 있습니까?
- 실제로 바인딩은 어떻게 수행됩니까?
- 왜 모델을 소문자 속성으로 디자인해야합니까? (이상하게 들리 겠지만 다른 (그룹) 프로젝트의 서식과 충돌합니다 ...)
- 검도가 "id"와 "hasChildren"을 다른 속성에 바인딩하는 방법이 있습니까 (같은 기능, 다른 이름)?
귀하의 답변에 따라 문제가 해결되었습니다. 나는 문서를 게시하기 전에 읽었습니다. 내 혼란은 내가 본 예제에서 BindTo() 메서드가 로컬 데이터에 사용되었다는 사실에서 비롯된 것 같다. ViewBag를 통하지 않고 Controller Action이 반환 한 데이터에 BindTo()를 사용할 수 있습니까? '.BindTo (DataSource ("read data"), schema ...)와 같은 것입니다. 나는 그것을 알아낼 수 없습니다 ... –
검도의 서버 측 확장에 액세스 할 수 없지만 작업에서 읽을 수 있도록 DataSource를 구성해야하는 작업 방법을 사용하려고합니다. 원래 코드가 이미 그렇게하고 있습니다. BindTo 메서드 대신 해당 코드를 사용하지 못하게하는 이유가 무엇인지 모릅니다. –