JQuery插件中的treeview与asp.net mvc的结合使用实例
时间:2009-10-09 10:00来源:未知 作者:admin 点击:次我要投稿 高质量的ASP.NET空间,完美支持1.0/2.0/3.5/4.0/MVC等
本文章主要介绍jquery插件中的treeview插件通过ajax异步从服务器上下载所需json字符串的实现,服务器端使用asp.net mvc实现。
treeview插件的官方demo地址:
实现步骤:
一、新建一JQueryTreeviewController,其默认的Index View内容如下:
<link rel="stylesheet" href="/Content/jquery.treeview.css" />
<script src="/Scripts/jquery-1.3.2.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.treeview.js" type="text/javascript"></script>
<script src="/Scripts/jquery.treeview.async.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#black").treeview({
url: '<%=Url.Action("GetMenuTree","JQueryTreeview") %>'
});
});
</script>
<h2>TreeViewIndex</h2>
<ul id="black" class="navigateFiletree">
</ul>
从以上代码中可以看出,获取此视图后,当页面就绪时将调用GetMenuTree action方法来获取treeview插件所需要的json字符串,并且自动生成树形。
注:代码中引用的js和css文件,在下载的treeview插件包中可以找到。
二、实现GetMenuTree action方法,代码如下:
public JsonStringResult GetMenuTree()
{
string sql = "SELECT [ModuleID],[SuperModuleID] FROM [SysModules]";
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString))
{
conn.Open();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = sql;
DataTable dt = new DataTable();
SqlDataReader reader = cmd.ExecuteReader();
dt.Load(reader);
reader.Close();
conn.Close();
return this.JsonString(JQTreeHelper.GetJsonString(dt, "ModuleID", "ModuleID", "SuperModuleID", ""));
}
}
其作用就是从数据库中读取出需要显示成树形的数据,并且调用JQTreeHelper来生成相应的json字符串,其返回结果中的JsonStringResult 是自定义的一个result类,其作用基本与系统自带的JsonResult相同,只是输出文本时不再进行json序列化而已。
三、实现JQTreeHelper类,代码如下:
/// <summary>
/// jquery插件中的treeview控件的帮助类,用于生成treeview控件所需要的html代码结构
/// </summary>
public static class JQTreeHelper
{
public static List<JQTreeNode> GetJsonData(DataTable dtAllNodes,string idColumnName,string textColumnName,string parentIdColumnName,string rootNodeParentIdValue)
{
List<JQTreeNode> rootNodes = new List<JQTreeNode>();
DataView dvRootNodes = new DataView(dtAllNodes);
dvRootNodes.RowFilter = parentIdColumnName + "='" + rootNodeParentIdValue + "'";
foreach (DataRowView dv in dvRootNodes)
{
JQTreeNode node = new JQTreeNode();
if (dv[idColumnName] != DBNull.Value)
{
node.id = dv[idColumnName].ToString();
}
node.text = dv[textColumnName].ToString();
node.children = GetJsonData(dtAllNodes, idColumnName, textColumnName, parentIdColumnName, dv[idColumnName].ToString());
rootNodes.Add(node);
}
return rootNodes;
}
public static string GetJsonString(DataTable dtAllNodes, string idColumnName, string textColumnName, string parentIdColumnName, string rootNodeParentIdValue)
{
List<JQTreeNode> actual;
actual = GetJsonData(dtAllNodes, idColumnName, textColumnName, parentIdColumnName, rootNodeParentIdValue);
//序列化后,由于默认将所有字段都序列化输出,所以需要将没有赋值取默认值的字段替换为空,以此来减少输出的字符数
StringBuilder result = new StringBuilder();
new JavaScriptSerializer().Serialize(actual, result);
result.Replace("\"id\":null,", "");
result.Replace(",\"expanded\":false", "");
result.Replace(",\"hasChildren\":false", "");
result.Replace(",\"classes\":null", "");
result.Replace(",\"children\":null", "");
return result.ToString();
}
}
/// <summary>
/// jquery插件中的treeview控件进行ajax请求时返回的json数据对象
/// </summary>
public class JQTreeNode
{
/// <summary>
/// 树节点id
/// </summary>
public string id { get; set; }
/// <summary>
/// 树节点文本
/// </summary>
public string text { get; set; }
/// <summary>
/// 是否展开
/// </summary>
public bool expanded { get; set; }
/// <summary>
/// 是否有子节点
/// </summary>
public bool hasChildren { get; set; }
/// <summary>
/// cssclass类名称
/// </summary>
public string classes { get; set; }
/// <summary>
/// 子节点集合
/// </summary>
public List<JQTreeNode> children { get; set; }
}
到此代码就全部结束。
本站推荐文章:
1、为什么要写自己的Ajax后台框架 现在Ajax在web应用方面已经用的稀巴烂了,如果你做...
原文地址:
用户注册信息验证在web开发中使用的非常多,只要涉及到用户注册,就会涉及到注册信息...
2006年初,dojo还是0.22的时候就很关注它的发展,可一直没有在实际项目中使用。一来是...
Dojo是一个非常强大的面向对象的JavaScript的工具箱, 建议能够去复习一下JavaScript下...
这几天自己在看Jquery,真是越来越喜欢了。张子秋博客里面写的这个系列很不错,在这表...
这个单词怎么读? 根据国外网站上别人的读法应该是四亏普特Q乐司 视觉特效 scrīptacu...
EXT - (中文:) Jquery -
微软目前目前对于通过Ajax风格的编程在浏览器中实现日益流行的富客户端应用比较感兴趣...
本站热点文章:
用户注册信息验证在web开发中使用的非常多,只要涉及到用户注册,就会涉及到注册信息...
这几天自己在看Jquery,真是越来越喜欢了。张子秋博客里面写的这个系列很不错,在这表...
1、为什么要写自己的Ajax后台框架 现在Ajax在web应用方面已经用的稀巴烂了,如果你做...
EXT - (中文:) Jquery -
原文地址:
2006年初,dojo还是0.22的时候就很关注它的发展,可一直没有在实际项目中使用。一来是...
Dojo是一个非常强大的面向对象的JavaScript的工具箱, 建议能够去复习一下JavaScript下...
这个单词怎么读? 根据国外网站上别人的读法应该是四亏普特Q乐司 视觉特效 scrīptacu...
微软目前目前对于通过Ajax风格的编程在浏览器中实现日益流行的富客户端应用比较感兴趣...
顶一下
(2)
100%
踩一下
(0)
0%
------分隔线----------------------------