Я использую jsTree для отображения древовидной структуры иерархических данных в моем приложении ASP.NET MVC. Пока я могу получить доступ к данным (через метод контроллера, который возвращает данные JSON) и отобразить дерево. Я также могу выбрать узлы в дереве, и это работает правильно. Вот код jsTree для этого:
$('#tree').
bind('select_node.jstree', function(event, data) {
alert("Node is selected.");
}).
jstree({
"core": {},
"json_data": {
"ajax": {
type: 'POST',
url: '/Scenario/TreeData',
data: "id=" + <%= Model.Scenario.ScenarioID %>,
success: function(data, textStatus, xhr) {
if(data.failed) {
window.location.href = data.redirectToUrl;
}
}
}
},
"themes": {
"theme": "default",
"dots": true,
"icons": true
},
"ui": {
"select_limit": 1
},
"plugins": ["themes", "ui", "json_data"]
});
Вот мое действие TreeData:
[HttpPost]
public ActionResult TreeData(int id)
{
var tree = new JsTreeModel();
Scenario scenario = repository.GetScenario(id);
if (scenario != null)
{
tree.data = new JsTreeData();
// [snip] Do the work to build the tree. [/snip]
return Json(tree);
}
var jsonData = new
{
failed = true,
redirectToUrl = Url.Action("NotFound")
};
return Json(jsonData);
}
Когда я застреваю, когда я нажимаю на узел, я не уверен, как извлечь данные для этого конкретного узла из моего приложения (через контроллер), отобразить их (предположительно в частичном представлении - все который я создал в это время - строго типизированные частичные представления), а затем предлагаем возможность отправить это частичное представление обратно на сервер для обновления данных.
Я не совсем уверен, с чего начать. У меня была мысль расширить класс TreeModel (модель C #, которая облегчает построение данных JSON для дерева), чтобы получить больше параметров в значении «data», что может позволить мне узнать, какую модель я пытаюсь получить. Однако это не выглядит так элегантно.
Я что-то упускаю из виду? У кого-нибудь есть другие предложения? Спасибо!