asp.net返回json 动态生成jQuery Easyui tree
2013-09-18 15:19
555 查看
在角色授权管理中用到
<div>
<asp:HiddenField ID="HiddenField1" runat="server" />
<ul id="tt" class="easyui-tree" >
</ul>
</form>
url:'Handler2.ashx',
method:'get',
animate:true,
checkbox: true,
onClick: function (node) {
//添加代码
alert(node.target);
},
formatter: function (node) {
var s = node.text;
if (node.children) {
s += ' <span style=\'color:blue\'>(' + node.children.length + ')</span>';
} else {
if ($('#tree').tree('isLeaf', node.target) && node.checked) {
s = ' <span style=\'color:red\'>' + s + '</span>';
}
}
return s;
}
});
{
context.Response.ContentType = "text/plain";
DataTable dt = new UserInfoManager().getRoleMenu("1");
string strjson = DataTable2Json(dt, "0", new StringBuilder(""));
context.Response.Write(strjson);
}
/// <summary>
/// 拼接jQuery EasyUi tree接受的json字符串
/// </summary>
/// <param name="dt">查询的结果</param>
/// <param name="parentid">树根的parentid</param>
/// <param name="jsonBuilder">返回的字符串</param>
/// <returns>jQuery EasyUi tree接受的json字符串</returns>
public static string DataTable2Json(DataTable dt, string parentid, StringBuilder jsonBuilder)
{
jsonBuilder.Append("[");
DataView dv = new DataView(dt);
dv.RowFilter = "parentid=" + parentid;
foreach (DataRowView row in dv)
{
jsonBuilder.Append("{");
jsonBuilder.Append("\"id\":");
jsonBuilder.Append("\"");
jsonBuilder.Append(row["id"].ToString());
jsonBuilder.Append("\",");
jsonBuilder.Append("\"checked\":");
//jsonBuilder.Append("\"");
jsonBuilder.Append(row["checked"].ToString());
//jsonBuilder.Append("\",");
jsonBuilder.Append(",");
jsonBuilder.Append("\"text\":");
jsonBuilder.Append("\"");
jsonBuilder.Append(row["text"].ToString());
jsonBuilder.Append("\",");
jsonBuilder.Append("\"attributes\":{");
jsonBuilder.Append("\"url\":");
jsonBuilder.Append("\"");
jsonBuilder.Append(row["url"].ToString());
jsonBuilder.Append("\"");
jsonBuilder.Append("}");
DataView dv2 = new DataView(dt);
dv2.RowFilter = "parentid=" + row["id"].ToString();
DataTable newTable = dv2.ToTable();
if (newTable.Rows.Count > 0)
{
jsonBuilder.Append(",\"children\":");
DataTable2Json(dt, row["id"].ToString(), jsonBuilder);
}
jsonBuilder.Append("},");
}
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
jsonBuilder.Append("]");
return jsonBuilder.ToString();
}
public DataTable getRoleMenu(string roleid)
{
string sql = "select case when a.id=b.id and b.url is not null then 'true' when a.id is null then 'false' else 'false' end as checked, b.* from rolemenu a right join menutab b on a.id=b.id and a.roleid ='" + roleid + "' group by b.parentid,b.id,a.id,b.text,b.url";
return DBHelper.getData(sql);
}
效果图
HTML代码
<form id="form1" runat="server"><div>
<asp:HiddenField ID="HiddenField1" runat="server" />
<ul id="tt" class="easyui-tree" >
</ul>
</form>
js代码
$('#tt').tree({url:'Handler2.ashx',
method:'get',
animate:true,
checkbox: true,
onClick: function (node) {
//添加代码
alert(node.target);
},
formatter: function (node) {
var s = node.text;
if (node.children) {
s += ' <span style=\'color:blue\'>(' + node.children.length + ')</span>';
} else {
if ($('#tree').tree('isLeaf', node.target) && node.checked) {
s = ' <span style=\'color:red\'>' + s + '</span>';
}
}
return s;
}
});
Handler2.ashx
public void ProcessRequest(HttpContext context){
context.Response.ContentType = "text/plain";
DataTable dt = new UserInfoManager().getRoleMenu("1");
string strjson = DataTable2Json(dt, "0", new StringBuilder(""));
context.Response.Write(strjson);
}
/// <summary>
/// 拼接jQuery EasyUi tree接受的json字符串
/// </summary>
/// <param name="dt">查询的结果</param>
/// <param name="parentid">树根的parentid</param>
/// <param name="jsonBuilder">返回的字符串</param>
/// <returns>jQuery EasyUi tree接受的json字符串</returns>
public static string DataTable2Json(DataTable dt, string parentid, StringBuilder jsonBuilder)
{
jsonBuilder.Append("[");
DataView dv = new DataView(dt);
dv.RowFilter = "parentid=" + parentid;
foreach (DataRowView row in dv)
{
jsonBuilder.Append("{");
jsonBuilder.Append("\"id\":");
jsonBuilder.Append("\"");
jsonBuilder.Append(row["id"].ToString());
jsonBuilder.Append("\",");
jsonBuilder.Append("\"checked\":");
//jsonBuilder.Append("\"");
jsonBuilder.Append(row["checked"].ToString());
//jsonBuilder.Append("\",");
jsonBuilder.Append(",");
jsonBuilder.Append("\"text\":");
jsonBuilder.Append("\"");
jsonBuilder.Append(row["text"].ToString());
jsonBuilder.Append("\",");
jsonBuilder.Append("\"attributes\":{");
jsonBuilder.Append("\"url\":");
jsonBuilder.Append("\"");
jsonBuilder.Append(row["url"].ToString());
jsonBuilder.Append("\"");
jsonBuilder.Append("}");
DataView dv2 = new DataView(dt);
dv2.RowFilter = "parentid=" + row["id"].ToString();
DataTable newTable = dv2.ToTable();
if (newTable.Rows.Count > 0)
{
jsonBuilder.Append(",\"children\":");
DataTable2Json(dt, row["id"].ToString(), jsonBuilder);
}
jsonBuilder.Append("},");
}
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
jsonBuilder.Append("]");
return jsonBuilder.ToString();
}
public DataTable getRoleMenu(string roleid)
{
string sql = "select case when a.id=b.id and b.url is not null then 'true' when a.id is null then 'false' else 'false' end as checked, b.* from rolemenu a right join menutab b on a.id=b.id and a.roleid ='" + roleid + "' group by b.parentid,b.id,a.id,b.text,b.url";
return DBHelper.getData(sql);
}
相关文章推荐
- 用JQuery 访问JSON动态生成ASP.NET控件
- asp.net数据库生成LigerUi树Tree结构Json格式数据(有点绕,附基本源代码)
- ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 用javascript在客户端删除某一个cookie键值对 input点击链接另一个页面,各种操作。 C# 往线程里传参数的方法总结 TCP/IP 协议 用C#+Selenium+ChromeDriver 生成我的咕咚跑步路线地图 (转)值得学习百度开源70+项目
- Asp.net生成Extjs-Tree数据格式的json类
- 用JQuery 访问JSON动态生成ASP.NET控件
- ArcGIS Server 10.2 实战(一)Asp.net MVC与JSON数据妙用实现动态生成要素图层
- LigerUI中生成GRID与TREE的【JSON数据】与Asp.Net的【变量数据】(方便测试)
- 动态生成随机数---ASP.net 验证码 (C#)
- AjaxPro.NET框架生成高效率的Tree(Asp.net 2.0)(示例代码下载)
- ASP.NET动态生成HTML页面
- 编程技巧 用Asp.net动态生成html页面
- ASP.NET 动态生成静态页面
- 用ASP.NET动态生成图像(转1)
- 简单的Asp.net mvc 里动态生成Linq的Ef查询扩展
- ASP.NET WebApi 自带Json返回日期带T无法格式化的问题
- Asp.net动态生成html页面
- 解决Asp.net Mvc返回JsonResult中DateTime类型数据格式的问题
- AjaxPro.NET框架生成高效率的Tree(Asp.net 2.0)(示例代码下载)
- ASP.NET动态加载用户控件的页面生成过程
- Asp.Net 动态生成验证码