使用 ASP.NET MVC5 中的 Ajax 将 Fancytree SelectedNodes 传递给控制器
Passing Fancytree SelectedNodes to controller with Ajax in ASP.NET MVC5
我正在尝试在 ASP.NET MVC5 项目中使用 FancyTree 插件,以允许用户在树视图中 select 项目,然后将 selected 对象列表传回到控制器进行处理。
在显示我的数据方面,我有一个工作树视图,这一点很好。我正在显示带有复选框的树视图。我的问题是当尝试使用 Ajax 将 selected 节点列表从树视图传递回控制器时。
这是初始化树视图的初始 jquery
$(function () {
$("#SiteID").text('Site ID : ' + $("#Sites option:selected").val());
$("#tree").fancytree({
selectMode: 3,
checkbox: true,
source: {
url: "@Url.Action("GetOLTs", "MNT")",
data: { SiteID: $("#Sites option:selected").val() },
cache: false
}
});
});
这是我用来尝试提交 selected 节点列表的按钮事件:-
$("#submit-button").on('click', function () {
var Nodes = $('#tree').fancytree('getTree').getSelectedNodes();
$.ajax({
url: '@Url.Action("SubmitData", "MNT")',
method: 'POST',
data: { TreeData: Nodes }
});
});
getSelectedNodes() 似乎是 select 正确的节点(我可以在警报中看到 Nodes 变量的值)并创建一个逗号分隔的列表,我将其分配给 "Nodes" .
当我点击按钮时出现以下错误:-
Uncaught RangeError: Maximum call stack size exceeded
对于这告诉我的内容以及如何将数据传递给控制器,我有点迷茫。感谢任何帮助。
方法
tree.getSelectedNodes()
returns FancytreeNode
个对象的数组。您需要将其转换为普通对象,以便 $.ajax
函数可以对其进行序列化。
例如遍历数组并使用 node.toDict()
:
var selNodes = $("#tree").fancytree("getTree").getSelectedNodes();
var selData = $.map(selNodes, function(n){
return n.toDict();
});
我正在尝试在 ASP.NET MVC5 项目中使用 FancyTree 插件,以允许用户在树视图中 select 项目,然后将 selected 对象列表传回到控制器进行处理。
在显示我的数据方面,我有一个工作树视图,这一点很好。我正在显示带有复选框的树视图。我的问题是当尝试使用 Ajax 将 selected 节点列表从树视图传递回控制器时。
这是初始化树视图的初始 jquery
$(function () {
$("#SiteID").text('Site ID : ' + $("#Sites option:selected").val());
$("#tree").fancytree({
selectMode: 3,
checkbox: true,
source: {
url: "@Url.Action("GetOLTs", "MNT")",
data: { SiteID: $("#Sites option:selected").val() },
cache: false
}
});
});
这是我用来尝试提交 selected 节点列表的按钮事件:-
$("#submit-button").on('click', function () {
var Nodes = $('#tree').fancytree('getTree').getSelectedNodes();
$.ajax({
url: '@Url.Action("SubmitData", "MNT")',
method: 'POST',
data: { TreeData: Nodes }
});
});
getSelectedNodes() 似乎是 select 正确的节点(我可以在警报中看到 Nodes 变量的值)并创建一个逗号分隔的列表,我将其分配给 "Nodes" .
当我点击按钮时出现以下错误:-
Uncaught RangeError: Maximum call stack size exceeded
对于这告诉我的内容以及如何将数据传递给控制器,我有点迷茫。感谢任何帮助。
方法
tree.getSelectedNodes()
returns FancytreeNode
个对象的数组。您需要将其转换为普通对象,以便 $.ajax
函数可以对其进行序列化。
例如遍历数组并使用 node.toDict()
:
var selNodes = $("#tree").fancytree("getTree").getSelectedNodes();
var selData = $.map(selNodes, function(n){
return n.toDict();
});