level 2
在ASP.NET MVC4中,通过拖拉生成树型菜单,在树型菜单项数量小于19或21项时,以下代码可以正确执行,当树型菜单项数量大于19或21项时,不去执行 url: "/Courseware/SummitCourseResources?id=" + *@ViewData["id"]*后台代码,请教一下,这是什么个情况?
var nodes = zTreeObj.transformToArray(zTreeObj.getNodes());
$.ajax({
url: "/Courseware/SummitCourseResources?id=" + *@ViewData["id"]*,
contentType: "application/json",
type: "post",
data: JSON.stringify(nodes),
dataType: "json",
async: true,
cache: false
});
2014年09月02日 02点09分
1
level 2
虽然没人回复,但问题已经解决,附上解决办法,希望有人能用到:
var nodes = zTreeObj.transformToArray(zTreeObj.getNodes());
JSON.stringify(nodes)
以上语名节点超过19或21项时,解析出来的json数据经过在线JSON校验格式化工具校验后是有效数据,但就是不执行后台程序。仔细查看以上语句获取的数据后,发现节点附带的属性太多,需要的属性只有几个,因此决定只提取需要的属性,其他属性完全舍弃,结果不管节点是多少项,后台程序都正确执行。
var nodes = zTreeObj.transformToArray(zTreeObj.getNodes());
var nodesArr = new Array(allNodes.length);
// 提取需要的属性
for (i = 0; i < allNodes.length; i++)
{
nodesArr[i] = { "id": allNodes[i].id.toString(), "pId": allNodes[i].pId.toString(), "name": allNodes[i].name.toString()};
}
$.ajax({
url: "/Courseware/SummitCourseResources?id=" + *@ViewData["id"]*,
contentType: "application/json",
type: "post",
data: JSON.stringify(nodesArr),
dataType: "json",
async: true,
cache: false
});
2014年09月03日 08点09分
3
level 2
感谢吧主回复邮件,以下是吧主回复的解决办法:
zTree 节点 的 json 数据中会产生大量 内部使用的属性, 所以当你把数据返回到后台的之前,一定要自己处理一遍(例如 clone 一下), 在 clone 的同时, 只选择你需要用到的属性, 其余的一概不要。。。
另外, 父节点的 json 数据中有 children 属性,它保存了 子节点的数据,所以 这个会导致你的数据中 产生大量的重复内容。。。可能也会导致你的数据量激增。。。从而影响了 ajax 的正常执行
请按照我说的方法,进行处理后,应该是可以正常工作的了
2014年09月04日 01点09分
5
结果如何??
2014年09月05日 00点09分
因为时间有点紧,没按照你的方法去测试,但原理基本是一致。
2014年09月05日 04点09分
level 2
再补充一点:
如果json数据大于30k左右的时候,后台也会不服务,在web.config中的<appSettings>增加以下配置,即可解决此问题。
<add key="aspnet:MaxJsonDeserializerMembers" value="1500000000" />
2014年09月05日 04点09分
6
好大的数据量。。。
2014年09月22日 06点09分
呵呵,可根据自己的需要进行设置!
2014年09月26日 08点09分
回复 云之清晨阳光 :
2014年10月09日 10点10分