折腾了好长时间,终于在今天用JsTree插件实现了Ajax异步加载节点的功能。
Zero.aspx页,该页用于显示树控件。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Zero.aspx.cs" Inherits="VistaToNewSchol.Zero" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script type="text/javascript" src="js/jquery-1.4.2.js"></script>
<script type="text/javascript" src="js/jquery.tree.js"></script>
<script type="text/javascript" >
$(function() {
$("#async_html_1").tree({
data: {
async: true,
opts: {
url: "ZeroData.aspx"
}
},
callback: {
beforedata: function(NODE, TREE_OBJ) {
return { id: $(NODE).attr("id") || -1 }
}
}
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="async_html_1">
</div>
</form>
</body>
</html>
后台用于动态提取节点数据的页面 ZeroData .aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Text;
namespace VistaToNewSchol
{
public partial class ZeroData : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
int intId = Convert.ToInt32(Request["id"].ToString()); //默认父节点是-1
string html = getNode(intId);
Response.Write(html);
Response.End();
}
}
//得到节点
public string getNode(int parentID)
{
string html = "";
StringBuilder strSql = new StringBuilder();
strSql.Append("select metaid,metaName ");
strSql.Append(" from dbo.metadata ");
strSql.Append(" where parentid=" + parentID + " ");
DataSet ds = VistaToNewSchol.DAL.DbHelperSQL.Query(strSql.ToString());
if (ds.Tables[0].Rows.Count > 0)
{
foreach (DataRow row in ds.Tables[0].Rows)
{
html += "<li id=/"" + row[0].ToString() + "/" class=/"closed/"><a href='#'><ins> </ins>" + row[0].ToString() + row[1].ToString() + "</a>";
html += "</li>";
}
}
return html;
}
}
}