asp.net返回json 动态生成jQuery Easyui tree

来源:互联网 发布:步步高录音电话软件 编辑:程序博客网 时间:2024/04/29 20:23

在角色授权管理中用到

效果图

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 += '&nbsp;<span style=\'color:blue\'>(' + node.children.length + ')</span>';
                    } else {
                        if ($('#tree').tree('isLeaf', node.target) && node.checked) {
                            s = '&nbsp;<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);
        }
原创粉丝点击