![](/images/cnblogs_com/jillzhang/wcf.png)
ExtJs与WCF交互:生成树
上文做了下Ajax与WCF进行json交互的简单介绍,本文阐述一个具体的实际应用:ExtJs与WCF交互,生成树.也很简单
上文做了下Ajax与WCF进行json交互的简单介绍,本文阐述一个具体的实际应用:ExtJs与WCF交互,生成树.也很简单.先看看最终的效果吧:
第一步: 创建一个.net framework 3.5的网站项目ExtJsTreeWcf
第二步: 在网站项目中创建一个启用了Ajax的WCF服务WcfTreeService.svc,创建好之后,对该服务做如下的更改:
1)在WcfTreeService.svc中增加Factory="System.ServiceModel.Activation.WebServiceHostFactory",打开WcfTreeService.Svchtml编辑器的方法如下:
添加Factory之后的html为
2)去除web.config中的<enableWebScript/>
第三步:在WcfTreeService.svc修改代码为:
[DataContract]
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public class treenode
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
[DataMember]
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public string id;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
[DataMember]
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public string text;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
[DataMember]
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public List<treenode> children = new List<treenode>();
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
[DataMember]
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public string cls;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
[DataMember]
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public bool leaf;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
[ServiceContract(Namespace = "")]
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public class WcfTreeService
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// 添加 [WebGet] 属性以使用 HTTP GET
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
[OperationContract]
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
[WebInvoke(ResponseFormat=WebMessageFormat.Json)]
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public treenode[] GetTree()
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
{
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// 在此处添加操作实现
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
treenode t = new treenode();
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
t.id = "noe1";
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
t.text = "节点1";
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
t.cls = "folder";
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
treenode t0 = new treenode();
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
t0.id = "noe1_0";
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
t0.text = "节点1_0";
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
t0.cls = "folder";
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
t0.leaf = true;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
t.children.Add(t0);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
treenode t1 = new treenode();
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
t1.cls = "folder";
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
t1.id = "000";
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
t1.text = "节点1";
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
treenode t2 = new treenode();
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
t2.id = "noe1_1";
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
t2.text = "节点1_1";
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
t2.cls = "folder";
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
t2.leaf = true;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
t1.children.Add(t2);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
List<treenode> nodes = new List<treenode>();
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
nodes.Add(t);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
nodes.Add(t1);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return nodes.ToArray();
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// 在此处添加更多操作并使用 [OperationContract] 标记它们
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
其中treenode是数据契约,而WcfTreeService是服务契约,服务操作GetTree返回Json编码格式数据
第四步:拷贝extjs的脚本资源拷贝到项目中的js目录,然后在default.aspx中添加对extjs脚本的引用:
<link rel="stylesheet" type="text/css" href="js/ext2.1/resources/css/ext-all.css">
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<script type="text/javascript" src="js/ext2.1/adapter/ext/ext-base.js"></script>
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<script type="text/javascript" src="js/ext2.1/ext-all.js"></script>
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
第五步:在default.aspx增加如下的页面元素:
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<h2>ExtJs与WCF交互-树</h2>
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<div id="tree-div">
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</div>
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
在<head></head>中添加如下脚本:
<script type="text/javascript">
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
Ext.onReady(function()
{
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
var Tree = Ext.tree;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
var tree = new Tree.TreePanel(
{
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
rootVisible: false,
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
el : 'tree-div',//目标div容器
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
width: 175,
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
height:200,
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
autoScroll : true,
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
animate : true,
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
enableDD : true,
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
loader : new Tree.TreeLoader(
{
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
dataUrl : 'WcfTreeService.svc/GetTree'
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
})
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
});
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
var root = new Tree.AsyncTreeNode(
{
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
text : '根结点',
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
draggable : false,
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
id : '-100'
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
});
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
tree.setRootNode(root);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
tree.render();
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
root.expand();
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
});
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</script>
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
浏览页面default.aspx便出现文章开头的页面效果
利用httpwacth察看WcfTreeService.svc/GetTree的输出如下:
[{"children":[{"children":[],"cls":"folder","id":"noe1_0","leaf":true,"text":"节点1_0"}],"cls":"folder","id":"noe1","leaf":false,"text":"节点1"},{"children":[{"children":[],"cls":"folder","id":"noe1_1","leaf":true,"text":"节点1_1"}],"cls":"folder","id":"000","leaf":false,"text":"节点1"}]
程序示例项目: /Files/jillzhang/ExtJsTreeWcf.rar