_Layout.cshtml
содержит RenderBody()
, который генерирует содержимое из представления в Index.cshtml
.
Index.cshtml
имеет большой скрипт загрузки jstree с помощью jQuery.
$('#tree').jstree({
"plugins": ["search", "wholerow", "dnd", "contextmenu", "massload", "search", "types"],
'core': {
"check_callback": true, // enable all modifications, tweak for rules.
'data': {
'url': function (node) {
return node.id === '#' ? "/Home/GetRoot" : "/Home/GetChildren/" + node.id;
},
'data': function (node) {
return { 'id': node.id };
}
}
}
});
Событие changed.jstree
собирает информацию о выбранном узле.Я хочу отобразить представление под деревом, которое содержит редактируемую форму, позволяющую выполнять CRUD-операции над деревом.
$('#tree').on("changed.jstree", function (e, data) {
$.ajax({
type: "GET",
url: "/Home/GetNodeInformation/" + data.selected,
data: '{id: "' + data.selected + '" }',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
if (response['node_type'] == 'Portfolio') {
$('#nodeinfo').load('@Url.Action("GetPortfolioDetails", "Portfolio")');
}
console.log(response['node_type'])
},
failure: function (response) {
alert(response.responseText);
},
error: function (response) {
alert(response.responseText);
}
});
});
Рендеринг дерева и события на нем работает хорошо, я считаю, что это потому, что RenderBody
работает как надо.
Но в тот момент, когда я звоню
$('#nodeinfo').load('@Url.Action("GetPortfolioDetails", "Portfolio")');
Вся страница снова отображается в этом div.
Вопрос - поскольку мое приложение представляет собой одностраничное приложение, как правильно управлять заполнителями в файле макета для обработки различных разделов рендеринга?В этом случае я не вижу, как я мог бы визуализировать и дерево, и область сведений под ним, потому что они взаимосвязаны.Я не думаю, что я могу использовать RenderBody для этого случая, и создание формы на лету с jQuery будет трудно поддерживать.