从数据库获取构造树结构是ExtJS TreePanel的核心技术,常用方法是TreeStroe里配置proxy,这种方式的root成了一个不受控制的节点。

TreeStroe的root实际是一个层叠json数据,大部分情况是直接写一些简单数据,但在实际应用中必定是要从数据库读取的。我的方法是先用Ext.Ajax.request获取root数据形成TreeStroe。定义一个全局的TreeStroe名字是mTreeStore,用Ext.Ajax.request获得root数据。TreeStoreRefresh函数与此类似,将mTreeStore的root换为新值。TreePanel的rootVisible属性必须为true,增加一个节点单击事件显示节点的信息。

var mTreeStore = null;
Ext.Ajax.request({
async: false,
url: '/api/BasicData_API/GetBasicTablesTreeSource',
method: 'get',
success: function (response, options)
{
var TreeRoot = Ext.decode(response.responseText);
mTreeStore = Ext.create('Ext.data.TreeStore',
{
root: TreeRoot
});
},
failure: function (response, options)
{
//var responseArray = Ext.decode(response.responseText);
Ext.Msg.alert('服务器错误', '数据处理错误原因:\n\r' + response.responseText);
}
}); function TreeStoreRefresh()
{
Ext.Ajax.request({
async: false,
url: '/api/BasicData_API/GetBasicTablesTreeSource',
method: 'get',
success: function (response, options)
{
var TreeRoot = Ext.decode(response.responseText);
if (mTreeStore != null)
{
mTreeStore.setRoot(TreeRoot);
}
},
failure: function (response, options)
{
//var responseArray = Ext.decode(response.responseText);
Ext.Msg.alert('服务器错误', '数据处理错误原因:\n\r' + response.responseText);
}
});
} Ext.define('TreeToolbarCls', {
extend: 'Ext.toolbar.Toolbar',
padding:'0 0 0 0',
items: [{
text: '刷新',
iconCls: 'refresh',
handler: TreeStoreRefresh,
height: 30,
width: 65
}]
}); Ext.define('U1TreeCls',
{
extend: 'Ext.tree.Panel',
xtype: 'U1Tree_xtype',
//title: '基础数据字典',
rootVisible: true,
width: 300,
store: mTreeStore,
scrollable: true,
tbar:Ext.create('TreeToolbarCls'),
listeners:
{
itemclick: NodeClick
}
}); function NodeClick(node, record, item, index, e, eOpts)
{  if (typeof (record.data) == "undefined")  {    return;  }  var message = Ext.String.format('Level={0}<br/>state={1}', record.data.Level, record.data.state);  Ext.Msg.alert("节点信息", message);}

下面是后台C#代码

定义一个TreeNode类,包含TreePanel节点固有的一些属性,也可以任意扩充,利用这个可以自定义许多附加数据,如我在里面定义Level表示节点的级别。

  [Authorize]
[RoutePrefix("api/BasicData_API")]
public class BasicData_APIController : ApiController
{
[Route("GetBasicTablesTreeSource")]
public HttpResponseMessage GetBasicTablesTreeSource(string condition = null)
{
List<TreeNode> lstF = new List<TreeNode>();
ZydAdonet z = ZydAdonet.Instance();
string s1 = "select TableName,title from BaseDataTables order by TableName";
string sqltext = s1;
DataTable dt1;
string ErrMes;
z.Sql2DTReadOnly(s1, out dt1, null, out ErrMes);
TreeNode tnd;
      foreach (DataRow drx in dt1.Rows)      {        tnd = new TreeNode        {          id = drx["TableName"].ToString(),          text = drx["title"].ToString(),          Level = 1,          iconCls = "table_6",          state = drx["TableName"].ToString() + " OK",          leaf = true        };        lstF.Add(tnd);      }      TreeNode root = new TreeNode      {        text = "基础数据字典",        expanded = false,        iconCls = "folder_close",        Level = 0,        state = "RootOfTree",        leaf = true      };      if (lstF.Count > 0)      {        root.expanded = true;        root.leaf = false;        root.iconCls = "folder_open";        root.children = lstF;      } string JsonStr;
JsonStr = JsonConvert.SerializeObject(root);
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, "value");
response.Content = new StringContent(JsonStr, Encoding.GetEncoding("UTF-8"), "application/json");
response.Headers.CacheControl = new CacheControlHeaderValue()
{
MaxAge = TimeSpan.FromMinutes(10)
};
return response;
}
} internal class TreeNode
{
public string id { get; set; }
public string text { get; set; }
public string iconCls { get; set; }
public string state { get; set; }
public bool leaf { get; set; }
public int Level { get; set; }
public bool expanded { get; set; }
public List<TreeNode> children { get; set; }
}

在NodeClick函数中断可以监视到更多的信息:

最后的运行效果:

 

然后更改数据表里的数据,点“刷新”就实现了TreePanel节点的刷新。

ASP.NET MVC 异步获取和刷新ExtJS6 TreeStore的更多相关文章

  1. ASP.NET MVC异步验证是如何工作的03,jquery.validate.unobtrusive.js是如何工作的

    在上一篇"ASP.NET MVC异步验证是如何工作的02,异步验证表单元素的创建"中了解了ASP.NET异步验证是如何创建表单元素的,本篇体验jquery.validate.uno ...

  2. ASP.NET MVC异步验证是如何工作的01,jQuery的验证方式、错误信息提示、validate方法的背后

    ASP.NET MVC借助jQuery的验证机制,提供了一套从客户端到服务端异步验证的解决方案,通常情况下,用起来相当方便.但面对一些相对特殊的情况,可能会遇到验证失效的场景,比如在使用ajax动态异 ...

  3. asp.net mvc异步查询

    对于asp.net mvc异步查询 如何做MVC异步查询,做列表页面. 查询是项目中必不可少的工作,而且不同的项目不同的团队,都有自己的简单方法.Asp.net mvc 有自己独特的优势,下面是结合m ...

  4. c#异步编程(三)—ASP.NET MVC 异步控制器及EF异步操作

    ASP.NET MVC 异步控制器及EF异步操作 异步控制器 ASP.NET MVC2后开始了对异步请求管道的支持,异步请求管道的作用是允许web服务器处理长时间运行的请求,比如 那些花费大量时间等待 ...

  5. ASP.NET MVC异步验证是如何工作的02,异步验证表单元素的创建

    在上一篇"ASP.NET MVC异步验证是如何工作的01,jQuery的验证方式.错误信息提示.validate方法的背后"中,了解了jQuery如何验证,如何显示错误信息,本篇要 ...

  6. ASP.NET MVC使用jQuery无刷新上传

    昨晚网友有下载了一个jQuery无刷新上传的小功能,他尝试搬至ASP.NET MVC应用程序中去,在上传死活无效果.Insus.NET使用Teamviewer远程桌面,操作一下,果真是有问题.网友是说 ...

  7. 在ASP.NET MVC 中获取当前URL、controller、action 、参数

    URL的获取很简单,ASP.NET通用:[1]获取 完整url (协议名+域名+虚拟目录名+文件名+参数) string url=Request.Url.ToString(); [2]获取 虚拟目录名 ...

  8. 对于asp.net mvc异步查询

    如何做MVC异步查询,做列表页面. 查询是项目中必不可少的工作,而且不同的项目不同的团队,都有自己的简单方法.Asp.net mvc 有自己独特的优势,下面是结合mvc实现一个产品列表的Demo. 问 ...

  9. MVC—实现ajax+mvc异步获取数据

    之前写过ajax和一般处理程序的结合实现前后台的数据交换的博客,如今做系统用到了MVC,同一时候也用到了异步获取数据. ajax+一般处理程序与MVC+ajax原理是一样的在"URL&quo ...

随机推荐

  1. 用Struts2拦截器实现文件下载前的验证

    思想:用户登录后,将登录信息存储在session中,每次需要验证时,取出来验证 缺陷:没有实现多用户登录时的情况 实行步骤: 登录信息的存储: ActionContext actionContext ...

  2. HDU2527 哈夫曼编码

    Safe Or Unsafe Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  3. weblogic的下载安装及myeclipse的配置

    weblogic的下载可以参考:http://jingyan.baidu.com/article/c910274b94e179cd371d2d7c.html 安装及myeclipse的配置参考:htt ...

  4. Android-adb指令

    adb概念: adb的全称为Android Debug Bridge(调试桥):通过adb我们可以在Eclipse中方便通过DDMS来调试Android程序.当我们运行Eclipse时ADB进程   ...

  5. 读取bmp图片数据

    public void getBMPImage(String source) throws Exception { clearNData(); //清除数据保存区 FileInputStream fs ...

  6. 《Linux内核设计与实现》读书笔记 第五章 系统调用

    第五章系统调用 系统调用是用户进程与内核进行交互的接口.为了保护系统稳定可靠,避免应用程序恣意忘形. 5.1与内核通信 系统调用在用户空间进程和硬件设备间添加了一个中间层, 作用:为用户空间提供了一种 ...

  7. http详解

    mac地址是网卡出厂的时候给定的固定地址.ip是当前节点被分配的地址,mac和ip相互配对: ip间通信- http本身是无状态无连接的,因为有这样的特性才能让他适用于当今这么复杂的网络环境. 但是有 ...

  8. python学习道路(day10note)(线程,进程)

    1.计算机的发展史 看alex的博客吧,了解一下可以了 2.线程与GIL简介 #线程 #一道单一的指令的控制流,寄生在进程中 #单一进程里的多个线程是共享数据的 #多个线程涉及修改共享数据的时候需要枷 ...

  9. 一步一步来做WebQQ机器人-(五)(发送消息||完结)

    × 本篇主要是: 发送QQ消息(to:好友,群),以及对小黄鸡抓包利用它的语言库 本文是WebQQ流程的最后一章 最后一章内容不多但我还是啰嗦,可能对大部分人都已知晓的流程方法我也会介绍一下 前面几个 ...

  10. es6 ajax

    简单的co用例: var co=require("co") class view{ constructor(){ co(function*(){ var p1=this.ajax1 ...