MVC4 JsTree 将选定的节点传递给控制器
MVC4 JsTree Passing Selected Node to Controller
我的视图中有以下javascript来构建TreeView并从服务器获取数据:
$(function () {
$("#EquipmentTree").jstree({
"json_data": {
"ajax": {
"url": "/Helper/GetEquipTreeViewData",
"type": "POST",
"data": function () {$("#EquipmentTree").jstree('get_selected').attr('id');},
"dataType": "json",
"contentType": "application/json charset=utf-8"
}
},
"themes": {
"theme": "default",
"dots": true,
"icons": true,
"url": "Scripts/jstree-v.pre1.0/themes/default/style.css"
},
"plugins": ["themes", "json_data"],
"core": { "animation": 100 }
});
});
我的控制器具有:
public ActionResult GetEquipTreeViewData(string nodeId)
{
do some stuff
return Json (data);
}
除了我从未获得选定的节点之外,一切都工作正常。我总是在nodeId得到NULL。即使我更改为:
"data": { nodeId : "TEST" }
我仍然得到空或一些Javascript错误。这让我发疯了。我也试过:
"data" : JSON.stringfy(nodeId);
并继续发送空值。
它应该是一个正常的 AJAX 调用,但事实并非如此。我只需要将选定的树节点传递给控制器,即可根据用户选择重新加载结果页面。
感谢您的帮助。
[编辑]我对测试变体的结果:
测试1:
var selected_node = $("#EquipmentTree").jstree('get_selected').attr('id');
$("#EquipmentTree").jstree({
"json_data": {
"ajax": {
"url": "/Helper/GetEquipTreeViewData",
"type": "POST",
"data": { nodeId : selected_node },
"dataType": "json",
"contentType": "application/json; charset=utf-8"
}
},
"themes": {
"theme": "default",
"dots": true,
"icons": true,
"url": "Scripts/jstree-v.pre1.0/themes/default/style.css"
},
"plugins": ["themes", "json_data"],
"core": { "animation": 100 }
});
});
浏览器错误:无效的 Jason Primitive: nodeId
[测试2]
法典:
$(function () {
var selected_node = $("#EquipmentTree").jstree('get_selected').attr('id');
$("#EquipmentTree").jstree({
"json_data": {
"ajax": {
"url": "/Helper/GetEquipTreeViewData",
"type": "POST",
// "data": { nodeId : selected_node },
"data": JSON.stringify ("nodeId : " + selected_node),
"dataType": "json",
"contentType": "application/json; charset=utf-8"
}
},
"themes": {
"theme": "default",
"dots": true,
"icons": true,
"url": "Scripts/jstree-v.pre1.0/themes/default/style.css"
},
"plugins": ["themes", "json_data"],
"core": { "animation": 100 }
});
});
在控制器上调用了该函数,但收到 null。浏览器数据:
Request URL:http://localhost:7767/Helper/GetEquipTreeViewData
Request Method:POST
Status Code:200 OK
Request Headersview parsed
POST /Helper/GetEquipTreeViewData HTTP/1.1
Host: localhost:7767
Connection: keep-alive
Content-Length: 24
Accept: application/json, text/javascript, */*; q=0.01
Origin: http://localhost:7767
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36
Content-Type: application/json; charset=UTF-8
Referer: http://localhost:7767/MasterDataAdminEquipment
Accept-Encoding: gzip,deflate,sdch
Accept-Language: pt-BR,pt;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: ASP.NET_SessionId=yuf1omlottf0xb4aklvfr4wg
Request Payload view source
nodeId : EquipmentTree
No Properties
修复它具有"无属性"的请求有效负载。通常我们会有一个表单数据,其中包含"参数"和"值"对的字典。这是我正在尝试的第n种组合。很奇怪...
在我的代码中,我使用:
"contentType": "application/json; charset=utf-8"
(注意";"(
除此之外,当 ajax 调用返回时,您应该返回一个 JSON 格式的响应:您是否尝试过使用 Chrome 开发人员工具对其进行检查?您收到回复了吗?
最后但并非最不重要的一点是,如果您得到正确的响应,默认情况下不会选择任何节点,因此查询get_selected
将返回undefined
。
试试这个:
public JsonResult GetEquipTreeViewData(string nodeId)
{
do some stuff
return Json (data, JsonRequestBehavior.DenyGet);
}
好的。这就是我解决它的方式(实际上我更改为将数据传递给视图的方式(:
$(function () {
var selected_node = $("#EquipmentTree").jstree('get_selected').attr('id');
var link = '@Url.Action("GetEquipTreeViewData", "Helper", new { nodeId = "-1" })';
link = link.replace("-1", selected_node);
$("#EquipmentTree").jstree({
"json_data": {
"ajax": {
"url": link,
"type": "POST",
"dataType": "json",
"contentType": "application/json; charset=utf-8"
}
},
"themes": {
"theme": "default",
"dots": true,
"icons": true,
"url": "Scripts/jstree-v.pre1.0/themes/default/style.css"
},
"plugins": ["themes", "json_data"],
"core": { "animation": 100 }
});
});
基本上我退出了javascript并去找助手(这就是他们在这里的目的。为了帮助(...Javascript很好,功能强大,但仍然缺乏一个好的IDE环境/调试工具来避免与逗号,半逗号和其他小事情相关的这些类型的故障。记住我以前的普通C++时代(我的意思是纯 cc 编译器,根本没有 IDE(。
希望这对某人有所帮助!
咔嚓!
- 在指令控制器中使用$attrs时出现问题
- 节点导出返回一个空对象
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 可以前端maven插件使用节点,npm已经安装
- 在jstree中,如何将指定的节点集中到大型树上
- 将 Jade Link 中的参数传递给节点控制器
- 节点.js中的模型-视图-控制器模式
- 如何从控制器获取表示 ngRepeat 中元素的 HTML 节点的参数
- 这是什么意思???香草节点.js当我使用强环控制器 API 时,I/O 阻塞会清除
- 角度控制器 - 保存节点发送的已接收文件
- MVC4 JsTree 将选定的节点传递给控制器
- 摩卡如何公开节点控制器函数来测试脚本
- 如何将模型和控制器合并到我的节点.js应用程序中
- 从根节点ng-if访问AngularJs控制器属性
- 有没有一种方法可以让子控制器继承服务呢?从其父节点获取
- 如何捕获树节点点击从一个(MVC)控制器在ExtJs 4
- 节点控制器 - 异步传递匿名函数
- 将变量从节点.js服务器端控制器传递到角度.js客户端控制器
- 如何在角度控制器中检索从节点服务器发送的 EJS 数据
- 用jsTree在最深的节点中创建到控制器的链接