(在线等!!!!) 框架中 局部刷新 在框架中,左边有一颗树(还有其他内容),在右边增加一个树节点后,在左边要及时显示的.因为要保持左边某些节点状态,所以左边只能局部刷新.请问大家怎么刷新?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用Ajax Extensions里的定时器定时刷新 在这里下载:http://www.microsoft.com/downloads/details.aspx?FamilyID=ca9d90fa-e8c9-42e3-aa19-08e2c027f5d6&displaylang=en给你个自动刷新的例子:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit"%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><script runat="server"> protected void Page_Load(object sender, EventArgs e) { this.lblTime.Text = System.DateTime.Now.ToString(); } protected void tm_Tick(object sender, EventArgs e) { this.lblTime.Text = System.DateTime.Now.ToString(); }</script><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title>定时刷新</title></head><body> <form id="form1" runat="server"> <asp:ScriptManager ID="sm" runat="server" /> <div> <asp:UpdatePanel ID="up" runat="server"> <ContentTemplate> <asp:Label ID="lblTime" runat="server"></asp:Label> <asp:Timer ID="tm" runat="server" Enabled="true" Interval="1000" OnTick="tm_Tick"></asp:Timer> </ContentTemplate> </asp:UpdatePanel> </div> <span id="time"></span> </form></body></html>后台无代码,不过这得要求你会正确使用Ajax Extensions。网上有很多资料你可以看一下 如果你的树是自己用JS实现的,那么你现在要实现这个当然也就很容易了,如果不是这样的。你可能就需要用UpdatePanel来实现。 左边的树是结点在第一次加载之后用Session保存起来(用DataTable /Array)。右边加结点时,对Session中保存的内容进行操作,之后加一条刷新左边的JS 脚本 ClientScript.RegisterClientScriptBlock(GetType(), "", "<script>window.parent.frames.左边边框名.location.href = '左边页'; </script>") 左边会对Session 内容重新加载 我没有用ajax.不用updatepanel能实现吗. 树就是treeview.用js 估计是很难实现左边树刷新的. 右边节点增加完,刷新左边的框架,重新提取数据。parent.左边框架名.window.location.reload(); reload()我用过了.问题是: 我左边页面其他节点状态就不能保持了. 用ajax 把你的树的节点写到xml里面去然后树的状态使用JS控制在把整个框架的大概设定号至于点击后局部刷新..使用一个异步传参把左边树节点做为参数传递给右方,把右面坐为一个单独页面 能说得详细一点吗?还有用js 来增加节点估计做不出来.出成的代码看不懂.好复杂.生成源码例如:<table cellpadding="0" cellspacing="0" style="border-width:0;"> <tr> <td><div style="width:20px;height:1px"></div></td><td><a id="TreeView2n12" href="javascript:TreeView_ToggleNode(TreeView2_Data,12,TreeView2n12,' ',TreeView2n12Nodes)"><img src="/PES.CMS.Web/WebResource.axd?d=i3cF8JjLUc0YN7sa1W4dBIrVplO_6sEf_y0HXesbqQA1&t=633441138476093750" alt="展开 演示组织机构" style="border-width:0;" /></a></td><td><a href="OR/OrganiseList.aspx?OrganiseFatherID=16&OrganiseFatherName=%e6%bc%94%e7%a4%ba%e7%bb%84%e7%bb%87%e6%9c%ba%e6%9e%84" target="ContentIframe" onclick="javascript:TreeView_SelectNode(TreeView2_Data, this,'TreeView2t12');" id="TreeView2t12i" tabindex="-1"><img src="../../Images/Manage/tree/bole.PNG" alt="组织机构" style="border-width:0;" /></a></td><td class="TreeView2_1" style="white-space:nowrap;"><a class="TreeView2_0" href="OR/OrganiseList.aspx?OrganiseFatherID=16&OrganiseFatherName=%e6%bc%94%e7%a4%ba%e7%bb%84%e7%bb%87%e6%9c%ba%e6%9e%84" target="ContentIframe" onclick="javascript:TreeView_SelectNode(TreeView2_Data, this,'TreeView2t12');" id="TreeView2t12">演示组织机构</a></td> </tr> </table> 感觉用js很难实现.用ajax 怎么做,有谁给个解决方案! 在操作treeview的时候不需要添加整个树一开始只递归两层即可也不要使用iframehtml: <table style="width: 100%"> <tr> <td valign="top" style="width: 30%"> <asp:Panel ID="Panel1" runat="server" Width="100%" Height="610px" ScrollBars="both"> <asp:TreeView ID="TreeView1" runat="server" Font-Size="10pt" ExpandDepth="1" SelectedNodeStyle-BackColor="AliceBlue" OnSelectedNodeChanged="TreeView1_SelectedNodeChanged"> <SelectedNodeStyle BackColor="AliceBlue" /> </asp:TreeView> </asp:Panel> </td> <td width="60%" valign="top"> <asp:Panel ID="Panel2" runat="server" Width="100%" Height="100%"> <table style="width: 95%"> <tr> <td> <fieldset><legend>添加/删除</legend> <table style="width: 87%"> <tr> <td align="right" width="40%"> 模块名称:</td> <td width="60%"> <asp:TextBox ID="txtname" runat="server" Width="200px"></asp:TextBox></td> </tr> <tr> <td align="right"> 模块路径:</td> <td> <asp:TextBox ID="txturl" runat="server" Width="200px"></asp:TextBox></td> </tr> <tr> <td align="right"> </td> <td> <%--<asp:CheckBox ID="cbeveryOne" runat="server" Text="everyone" />--%> <asp:RadioButtonList ID="cbeveryOne" runat="server" RepeatDirection="Horizontal"> <asp:ListItem Text="不限" Value="" Selected="true"></asp:ListItem> <asp:ListItem Text="everyone" Value="everyone"></asp:ListItem> <asp:ListItem Text="outSide" Value="outSide"></asp:ListItem> </asp:RadioButtonList></td> </tr> <tr> <td align="right"> </td> <td> <asp:Button ID="btAdd" runat="server" Text="添 加" OnClick="btAdd_Click" /> <asp:Button ID="btdel" runat="server" OnClientClick="return confirm('确定要删除么?')" Text="删 除" OnClick="btdel_Click"/></td> </tr> </table> </fieldset> </td> </tr></table><table width="100%"> <tr><td> <fieldset><legend> <asp:LinkButton ID="lbrep" runat="server" OnClick="lbrep_Click">我要修改</asp:LinkButton></legend> <table width="100%" id="tableRep" runat="server" visible="false"> <tr> <td align="right"> 模块名称:</td> <td> <asp:TextBox ID="txtrepname" runat="server" Width="200px"></asp:TextBox></td> </tr> <tr><td align="right"> 模块路径:</td> <td> <asp:TextBox ID="txtrepUrl" runat="server" Width="200px"></asp:TextBox></td> </tr> <tr> <td align="right"> </td> <td> <asp:RadioButtonList ID="cbrep" runat="server" RepeatDirection="Horizontal"> <asp:ListItem Text="不限" Value=""></asp:ListItem> <asp:ListItem Text="everyone" Value="everyone"></asp:ListItem> <asp:ListItem Text="outSide" Value="outSide"></asp:ListItem> </asp:RadioButtonList> <%-- <asp:CheckBox ID="cbrep" runat="server" Text="everyone" />--%></td> </tr> <tr><td></td> <td> <asp:Button ID="btrep" runat="server" Text="修 改" OnClick="btrep_Click"/></td> </tr> </table></fieldset> </td></tr></table></asp:Panel> </td> </tr> </table> cs:public partial class Admin_Function : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { Sys_Function fun = new Sys_Function(); TreeNode node = new TreeNode(); node.Value = "-1"; node.Text = "功能模块"; TreeView1.Nodes.Add(node); fun.InitTreeNode(node,node.Value); } } protected void btAdd_Click(object sender, EventArgs e) { /**********基本验证*************/ if (TreeView1.SelectedNode == null) { ClientScript.RegisterClientScriptBlock(this.GetType(), "", "alert('请选择一个结点!')", true); return; } string strError = ""; if (txtname.Text.Trim() == "") { strError += "功能名称不能为空!\\n"; } //if (txturl.Text.Trim() == "") //{ // strError += "功能路径不能为空!\\n"; //} if (strError != "") { ClientScript.RegisterClientScriptBlock(this.GetType(), "", "alert('" + strError + "')", true); return; } /**********基本验证结束*************/ Sys_Function fun = new Sys_Function(); Publicfun pf = new Publicfun(); string TId = pf.GetID(); string Tname = txtname.Text; string Turl = txturl.Text; string everyone = this.cbeveryOne.SelectedItem.Value; fun.ID = TId; fun.ParentId = this.TreeView1.SelectedNode.Value; fun.Name = Tname; fun.Url = Turl; fun.EveryOne = everyone; int a = fun.Add(); if (a > 0) { TreeView1.SelectedNode.ChildNodes.Clear(); TreeView1.SelectedNode.ImageUrl = ""; fun.InitTreeNode(TreeView1.SelectedNode, TreeView1.SelectedNode.Value); TreeView1.SelectedNode.ExpandAll(); txtname.Text = ""; txturl.Text = ""; } } protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e) { tableRep.Visible = false; if (TreeView1.SelectedNode.ChildNodes.Count > 0) { return; } Sys_Function fun = new Sys_Function(); DataTable dt = fun.GetList(" parentId='" + this.TreeView1.SelectedNode.Value + "'"); if (dt.Rows.Count > 0) { TreeView1.SelectedNode.ImageUrl = ""; TreeView1.SelectedNode.ChildNodes.Clear(); fun.InitTreeNode(this.TreeView1.SelectedNode, this.TreeView1.SelectedNode.Value); TreeView1.SelectedNode.ExpandAll(); } } protected void lbrep_Click(object sender, EventArgs e) { if (TreeView1.SelectedNode == null) { ClientScript.RegisterClientScriptBlock(this.GetType(), "", "alert('请选中一个结点!')", true); return; } if (TreeView1.SelectedNode.Value == "-1") { ClientScript.RegisterClientScriptBlock(this.GetType(), "", "alert('根结点不能修改!')", true); return; } this.tableRep.Visible = true; txtrepname.Text = this.TreeView1.SelectedNode.Text; txtrepUrl.Text = this.TreeView1.SelectedNode.ToolTip; Sys_Function fun = new Sys_Function(); this.cbrep.SelectedValue = fun.GetList("id='" + TreeView1.SelectedNode.Value + "'").Rows[0]["EVERYONE"].ToString(); } protected void btdel_Click(object sender, EventArgs e) { if (TreeView1.SelectedNode == null) { ClientScript.RegisterClientScriptBlock(this.GetType(), "", "alert('请选择一个结点!')", true); return; } if (TreeView1.SelectedNode.Value == "-1") { ClientScript.RegisterClientScriptBlock(this.GetType(), "", "alert('根结点不能删除!')", true); return; } if (TreeView1.SelectedNode.ChildNodes.Count > 0) { ClientScript.RegisterClientScriptBlock(this.GetType(), "", "alert('存在子节点,不能删除!')", true); return; } Sys_Mapping map = new Sys_Mapping(); DataTable dt= map.GetList("funid='" + this.TreeView1.SelectedNode.Value+"'"); if (dt.Rows.Count > 0) { ClientScript.RegisterClientScriptBlock(this.GetType(),"","alert('内网已映射!不能删除!')",true); return; } Sys_OutMapping outMap = new Sys_OutMapping(); dt = outMap.GetList("funid='"+TreeView1.SelectedNode.Value+"'"); if (dt.Rows.Count>0) { ClientScript.RegisterClientScriptBlock(this.GetType(), "", "alert('外网已映射!不能删除!')", true); return; } //sys Sys_Function fun = new Sys_Function(); int a = fun.Delete(this.TreeView1.SelectedNode.Value); if (a > 0) { TreeView1.SelectedNode.Parent.Select(); TreeView1.SelectedNode.ChildNodes.Clear(); fun.InitTreeNode(TreeView1.SelectedNode, TreeView1.SelectedNode.Value); } } protected void btrep_Click(object sender, EventArgs e) { /*********基本验证**************/ string strError = ""; if (txtrepname.Text.Trim() == "") { strError += "模块名称不能为空!\\n"; } //if (txtrepUrl.Text.Trim() == "") //{ // strError += "模块路径不能为空!\\n"; //} if (strError != "") { ClientScript.RegisterClientScriptBlock(this.GetType(), "", "alert('" + strError + "')", true); return; } /*********基本验证结束**************/ Sys_Function fun = new Sys_Function(); fun.ID = this.TreeView1.SelectedNode.Value; fun.Name = txtrepname.Text; fun.Url = txtrepUrl.Text; fun.EveryOne = cbrep.SelectedItem.Value; int a = fun.Update(); if (a > 0) { TreeView1.SelectedNode.Text = this.txtrepname.Text; TreeView1.SelectedNode.ToolTip = this.txtrepUrl.Text; this.tableRep.Visible = false; } }} 不知道楼主所说的树是asp.net的treeview控件,还是javascript的树,这个你得说清楚啊。 单类实体:public class Sys_Function{ OracleData data=null; public Sys_Function() { } #region Model private string _id; private string _Name; private string _ParentID; private string _url; private int _OrderId; private string _PicUrl; private string _everyone; /// <summary> /// 编号 /// </summary> public string ID { get { return _id; } set { _id = value; } } /// <summary> /// 模块名称 /// </summary> public string Name { get { return _Name; } set { _Name = value; } } /// <summary> /// 父编号 /// </summary> public string ParentId { get { return _ParentID; } set { _ParentID = value; } } /// <summary> /// 功能地址 /// </summary> public string Url { get { return _url; } set { _url = value; } } /// <summary> /// 排序 /// </summary> public int OrderID { get { return _OrderId; } set { _OrderId = value; } } /// <summary> /// 菜单图片地址 /// </summary> public string PicUrl { get { return _PicUrl; } set { _PicUrl = value; } } public string EveryOne { get { return _everyone; } set { _everyone = value; } } #endregion /// <summary> /// 增加一条数据 /// </summary> public int Add() { data=new OracleData(); StringBuilder strSql=new StringBuilder(); strSql.Append("insert into SYS_FUNCTION("); strSql.Append("ID,NAME,PARENTID,URL,EVERYONE"); strSql.Append(")"); strSql.Append(" values ("); strSql.Append("'"+ID+"',"); strSql.Append("'"+Name+"',"); strSql.Append("'"+ParentId+"',"); strSql.Append("'"+Url+"',"); strSql.Append("'"+EveryOne+"'"); strSql.Append(")"); return data.ExecuteSQL(strSql.ToString()); } /// <summary> /// 更新一条数据 /// </summary> public int Update() { data = new OracleData(); StringBuilder strSql=new StringBuilder(); strSql.Append("update SYS_FUNCTION set "); strSql.Append("NAME='"+Name+"',"); strSql.Append("URL='"+Url+"',"); strSql.Append("EVERYONE='"+EveryOne+"'"); strSql.Append(" where ID='"+ID+"'"); return data.ExecuteSQL(strSql.ToString()); } /// <summary> /// 删除一条数据 /// </summary> public int Delete(string ID) { data=new OracleData(); StringBuilder strSql=new StringBuilder(); strSql.Append("delete SYS_FUNCTION "); strSql.Append(" where ID='"+ID+"'"); return data.ExecuteSQL(strSql.ToString()); } /// <summary> /// 得到一个对象实体 /// </summary> public void GetModel(string ID) { data = new OracleData(); StringBuilder strSql=new StringBuilder(); strSql.Append("select "); strSql.Append("ID,NAME,PARENTID,URL,ORDERID,PICURL,EVERYONE "); strSql.Append(" from SYS_FUNCTION "); strSql.Append(" where ID='"+ID+"'"); DataSet ds=data.GetDataSet(strSql.ToString()); if(ds.Tables[0].Rows.Count>0) { Name=ds.Tables[0].Rows[0]["NAME"].ToString(); ParentId=ds.Tables[0].Rows[0]["PARENTID"].ToString(); Url=ds.Tables[0].Rows[0]["URL"].ToString(); if(ds.Tables[0].Rows[0]["ORDERID"].ToString()!="") { OrderID=int.Parse(ds.Tables[0].Rows[0]["ORDERID"].ToString()); } PicUrl=ds.Tables[0].Rows[0]["PICURL"].ToString(); EveryOne=ds.Tables[0].Rows[0]["EVERYONE"].ToString(); } } /// <summary> /// 获得数据列表 /// </summary> public DataTable GetList(string strWhere) { data = new OracleData(); StringBuilder strSql=new StringBuilder(); strSql.Append("select ID,NAME,PARENTID,URL,ORDERID,PICURL,EVERYONE "); strSql.Append(" FROM SYS_FUNCTION "); if(strWhere.Trim()!="") { strSql.Append(" where "+strWhere); } return data.GetDataTable(strSql.ToString()); } /// <summary> /// 递归行政区号 /// </summary> /// <param name="node">初始化节点</param> /// <param name="sParentID">父节点编号</param> public void InitTreeNode(TreeNode node, string sParentID) { DataView dvw = new DataView(); TreeNode nodTemp; dvw.Table = GetList("ParentID='" + sParentID + "'"); foreach (DataRowView drv in dvw) { nodTemp = new TreeNode(); nodTemp.Value = drv["id"].ToString(); nodTemp.Text = drv["Name"].ToString(); nodTemp.ToolTip = drv["url"].ToString(); DataTable sdt = GetList("ParentID='" + nodTemp.Value + "'"); if (sdt.Rows.Count > 0) { nodTemp.ImageUrl = "~/Admin/images/jia.gif"; } else { nodTemp.ImageUrl = "~/Admin/images/jian.gif"; } node.ChildNodes.Add(nodTemp); //InitTreeNode(nodTemp, nodTemp.Value); } }} 前面我有说是treeview 啊. 用ajax不就要定时取回发了吗?那样服务器负担会不会太大了. 呵呵,建议楼主还是用javascript中的ajax来做吧,微软的ajax.net很让你讨厌的 updatepanel难道不用回发吗????而且每次回发都是整页回发,服务器负担更大 现在功能已经出来了.我用的是updatePanel.如果用javascript中的ajax,我估计我做不出来.因为要生成这样一段代码:<table cellpadding="0" cellspacing="0" style="border-width:0;"> <tr> <td><div style="width:20px;height:1px"></div></td><td><a id="TreeView2n12" href="javascript:TreeView_ToggleNode(TreeView2_Data,12,TreeView2n12,' ',TreeView2n12Nodes)"><img src="/PES.CMS.Web/WebResource.axd?d=i3cF8JjLUc0YN7sa1W4dBIrVplO_6sEf_y0HXesbqQA1&t=633441138476093750" alt="展开 演示组织机构" style="border-width:0;" /></a></td><td><a href="OR/OrganiseList.aspx?OrganiseFatherID=16&OrganiseFatherName=%e6%bc%94%e7%a4%ba%e7%bb%84%e7%bb%87%e6%9c%ba%e6%9e%84" target="ContentIframe" onclick="javascript:TreeView_SelectNode(TreeView2_Data, this,'TreeView2t12');" id="TreeView2t12i" tabindex="-1"><img src="../../Images/Manage/tree/bole.PNG" alt="组织机构" style="border-width:0;" /></a></td><td class="TreeView2_1" style="white-space:nowrap;"><a class="TreeView2_0" href="OR/OrganiseList.aspx?OrganiseFatherID=16&OrganiseFatherName=%e6%bc%94%e7%a4%ba%e7%bb%84%e7%bb%87%e6%9c%ba%e6%9e%84" target="ContentIframe" onclick="javascript:TreeView_SelectNode(TreeView2_Data, this,'TreeView2t12');" id="TreeView2t12">演示组织机构</a></td> </tr> </table> 呵呵,建议楼主去看看http://blog.csdn.net/brz97/archive/2008/07/01/2600097.aspx asp.net方法名的问题,求解释 何如在文本框中显示一些特殊的文本? 求web系统与服务程序通信的最佳方法 asp.net 通过鼠标连续点击生成热区,产生链接,怎么实现? 如何动态生成checkbox并修改id跟取值?(在页面上用循环生成) .net中登陆问题 请教,ppt格式转换为html格式的方法 用户控件中使用javascript代码 大家帮忙看看那里错了,该怎么处理 默认的CSS样式元素都有那些 还是没搞明白,再提问,关于GRIDVIEW动态添加列的格式控制问题 C# ASP空间,静态变量问题
http://www.microsoft.com/downloads/details.aspx?FamilyID=ca9d90fa-e8c9-42e3-aa19-08e2c027f5d6&displaylang=en给你个自动刷新的例子:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
this.lblTime.Text = System.DateTime.Now.ToString();
}
protected void tm_Tick(object sender, EventArgs e)
{
this.lblTime.Text = System.DateTime.Now.ToString();
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>定时刷新</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="sm" runat="server" />
<div>
<asp:UpdatePanel ID="up" runat="server">
<ContentTemplate>
<asp:Label ID="lblTime" runat="server"></asp:Label>
<asp:Timer ID="tm" runat="server" Enabled="true" Interval="1000" OnTick="tm_Tick"></asp:Timer>
</ContentTemplate>
</asp:UpdatePanel>
</div>
<span id="time"></span>
</form>
</body>
</html>后台无代码,不过这得要求你会正确使用Ajax Extensions。网上有很多资料你可以看一下
UpdatePanel来实现。
ClientScript.RegisterClientScriptBlock(GetType(), "", "<script>window.parent.frames.左边边框名.location.href = '左边页'; </script>") 左边会对Session 内容重新加载
不用updatepanel能实现吗.
parent.左边框架名.window.location.reload();
reload()我用过了.
问题是: 我左边页面其他节点状态就不能保持了.
把你的树的节点写到xml里面去
然后树的状态使用JS控制
在把整个框架的大概设定号
至于点击后局部刷新..使用一个异步传参
把左边树节点做为参数传递给右方,把右面坐为一个单独页面
能说得详细一点吗?还有用js 来增加节点估计做不出来.
出成的代码看不懂.好复杂.生成源码例如:
<table cellpadding="0" cellspacing="0" style="border-width:0;">
<tr>
<td><div style="width:20px;height:1px"></div></td><td><a id="TreeView2n12" href="javascript:TreeView_ToggleNode(TreeView2_Data,12,TreeView2n12,' ',TreeView2n12Nodes)"><img src="/PES.CMS.Web/WebResource.axd?d=i3cF8JjLUc0YN7sa1W4dBIrVplO_6sEf_y0HXesbqQA1&t=633441138476093750" alt="展开 演示组织机构" style="border-width:0;" /></a></td><td><a href="OR/OrganiseList.aspx?OrganiseFatherID=16&OrganiseFatherName=%e6%bc%94%e7%a4%ba%e7%bb%84%e7%bb%87%e6%9c%ba%e6%9e%84" target="ContentIframe" onclick="javascript:TreeView_SelectNode(TreeView2_Data, this,'TreeView2t12');" id="TreeView2t12i" tabindex="-1"><img src="../../Images/Manage/tree/bole.PNG" alt="组织机构" style="border-width:0;" /></a></td><td class="TreeView2_1" style="white-space:nowrap;"><a class="TreeView2_0" href="OR/OrganiseList.aspx?OrganiseFatherID=16&OrganiseFatherName=%e6%bc%94%e7%a4%ba%e7%bb%84%e7%bb%87%e6%9c%ba%e6%9e%84" target="ContentIframe" onclick="javascript:TreeView_SelectNode(TreeView2_Data, this,'TreeView2t12');" id="TreeView2t12">演示组织机构</a></td>
</tr>
</table>
用ajax 怎么做,有谁给个解决方案!
一开始只递归两层即可
也不要使用iframehtml:
<table style="width: 100%">
<tr>
<td valign="top" style="width: 30%">
<asp:Panel ID="Panel1" runat="server" Width="100%" Height="610px" ScrollBars="both">
<asp:TreeView ID="TreeView1" runat="server" Font-Size="10pt" ExpandDepth="1" SelectedNodeStyle-BackColor="AliceBlue" OnSelectedNodeChanged="TreeView1_SelectedNodeChanged">
<SelectedNodeStyle BackColor="AliceBlue" />
</asp:TreeView>
</asp:Panel>
</td>
<td width="60%" valign="top">
<asp:Panel ID="Panel2" runat="server" Width="100%" Height="100%">
<table style="width: 95%">
<tr>
<td>
<fieldset><legend>添加/删除</legend>
<table style="width: 87%">
<tr>
<td align="right" width="40%">
模块名称:</td>
<td width="60%">
<asp:TextBox ID="txtname" runat="server" Width="200px"></asp:TextBox></td>
</tr>
<tr>
<td align="right">
模块路径:</td>
<td>
<asp:TextBox ID="txturl" runat="server" Width="200px"></asp:TextBox></td>
</tr>
<tr>
<td align="right">
</td>
<td>
<%--<asp:CheckBox ID="cbeveryOne" runat="server" Text="everyone" />--%>
<asp:RadioButtonList ID="cbeveryOne" runat="server" RepeatDirection="Horizontal">
<asp:ListItem Text="不限" Value="" Selected="true"></asp:ListItem>
<asp:ListItem Text="everyone" Value="everyone"></asp:ListItem>
<asp:ListItem Text="outSide" Value="outSide"></asp:ListItem>
</asp:RadioButtonList></td>
</tr>
<tr>
<td align="right">
</td>
<td>
<asp:Button ID="btAdd" runat="server" Text="添 加" OnClick="btAdd_Click" />
<asp:Button ID="btdel" runat="server" OnClientClick="return confirm('确定要删除么?')" Text="删 除" OnClick="btdel_Click"/></td>
</tr>
</table>
</fieldset>
</td>
</tr></table><table width="100%">
<tr><td>
<fieldset><legend>
<asp:LinkButton ID="lbrep" runat="server" OnClick="lbrep_Click">我要修改</asp:LinkButton></legend>
<table width="100%" id="tableRep" runat="server" visible="false">
<tr>
<td align="right">
模块名称:</td>
<td>
<asp:TextBox ID="txtrepname" runat="server" Width="200px"></asp:TextBox></td>
</tr>
<tr><td align="right">
模块路径:</td>
<td>
<asp:TextBox ID="txtrepUrl" runat="server" Width="200px"></asp:TextBox></td>
</tr>
<tr>
<td align="right">
</td>
<td>
<asp:RadioButtonList ID="cbrep" runat="server" RepeatDirection="Horizontal">
<asp:ListItem Text="不限" Value=""></asp:ListItem>
<asp:ListItem Text="everyone" Value="everyone"></asp:ListItem>
<asp:ListItem Text="outSide" Value="outSide"></asp:ListItem>
</asp:RadioButtonList>
<%-- <asp:CheckBox ID="cbrep" runat="server" Text="everyone" />--%></td>
</tr>
<tr><td></td>
<td>
<asp:Button ID="btrep" runat="server" Text="修 改" OnClick="btrep_Click"/></td>
</tr>
</table></fieldset>
</td></tr></table></asp:Panel>
</td>
</tr>
</table>
public partial class Admin_Function : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Sys_Function fun = new Sys_Function();
TreeNode node = new TreeNode();
node.Value = "-1";
node.Text = "功能模块";
TreeView1.Nodes.Add(node);
fun.InitTreeNode(node,node.Value);
}
}
protected void btAdd_Click(object sender, EventArgs e)
{
/**********基本验证*************/
if (TreeView1.SelectedNode == null)
{
ClientScript.RegisterClientScriptBlock(this.GetType(), "", "alert('请选择一个结点!')", true);
return;
}
string strError = "";
if (txtname.Text.Trim() == "")
{
strError += "功能名称不能为空!\\n";
}
//if (txturl.Text.Trim() == "")
//{
// strError += "功能路径不能为空!\\n";
//}
if (strError != "")
{
ClientScript.RegisterClientScriptBlock(this.GetType(), "", "alert('" + strError + "')", true);
return;
}
/**********基本验证结束*************/
Sys_Function fun = new Sys_Function();
Publicfun pf = new Publicfun();
string TId = pf.GetID();
string Tname = txtname.Text;
string Turl = txturl.Text;
string everyone = this.cbeveryOne.SelectedItem.Value;
fun.ID = TId;
fun.ParentId = this.TreeView1.SelectedNode.Value;
fun.Name = Tname;
fun.Url = Turl;
fun.EveryOne = everyone;
int a = fun.Add();
if (a > 0)
{
TreeView1.SelectedNode.ChildNodes.Clear();
TreeView1.SelectedNode.ImageUrl = "";
fun.InitTreeNode(TreeView1.SelectedNode, TreeView1.SelectedNode.Value);
TreeView1.SelectedNode.ExpandAll();
txtname.Text = "";
txturl.Text = "";
}
}
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
tableRep.Visible = false;
if (TreeView1.SelectedNode.ChildNodes.Count > 0)
{
return;
}
Sys_Function fun = new Sys_Function();
DataTable dt = fun.GetList(" parentId='" + this.TreeView1.SelectedNode.Value + "'");
if (dt.Rows.Count > 0)
{
TreeView1.SelectedNode.ImageUrl = "";
TreeView1.SelectedNode.ChildNodes.Clear();
fun.InitTreeNode(this.TreeView1.SelectedNode, this.TreeView1.SelectedNode.Value);
TreeView1.SelectedNode.ExpandAll();
}
}
protected void lbrep_Click(object sender, EventArgs e)
{
if (TreeView1.SelectedNode == null)
{
ClientScript.RegisterClientScriptBlock(this.GetType(), "", "alert('请选中一个结点!')", true);
return;
}
if (TreeView1.SelectedNode.Value == "-1")
{
ClientScript.RegisterClientScriptBlock(this.GetType(), "", "alert('根结点不能修改!')", true);
return;
}
this.tableRep.Visible = true;
txtrepname.Text = this.TreeView1.SelectedNode.Text;
txtrepUrl.Text = this.TreeView1.SelectedNode.ToolTip;
Sys_Function fun = new Sys_Function();
this.cbrep.SelectedValue = fun.GetList("id='" + TreeView1.SelectedNode.Value + "'").Rows[0]["EVERYONE"].ToString();
}
protected void btdel_Click(object sender, EventArgs e)
{
if (TreeView1.SelectedNode == null)
{
ClientScript.RegisterClientScriptBlock(this.GetType(), "", "alert('请选择一个结点!')", true);
return;
}
if (TreeView1.SelectedNode.Value == "-1")
{
ClientScript.RegisterClientScriptBlock(this.GetType(), "", "alert('根结点不能删除!')", true);
return;
}
if (TreeView1.SelectedNode.ChildNodes.Count > 0)
{
ClientScript.RegisterClientScriptBlock(this.GetType(), "", "alert('存在子节点,不能删除!')", true);
return;
}
Sys_Mapping map = new Sys_Mapping();
DataTable dt= map.GetList("funid='" + this.TreeView1.SelectedNode.Value+"'");
if (dt.Rows.Count > 0)
{
ClientScript.RegisterClientScriptBlock(this.GetType(),"","alert('内网已映射!不能删除!')",true);
return;
}
Sys_OutMapping outMap = new Sys_OutMapping();
dt = outMap.GetList("funid='"+TreeView1.SelectedNode.Value+"'");
if (dt.Rows.Count>0)
{
ClientScript.RegisterClientScriptBlock(this.GetType(), "", "alert('外网已映射!不能删除!')", true);
return;
}
//sys
Sys_Function fun = new Sys_Function();
int a = fun.Delete(this.TreeView1.SelectedNode.Value);
if (a > 0)
{
TreeView1.SelectedNode.Parent.Select();
TreeView1.SelectedNode.ChildNodes.Clear();
fun.InitTreeNode(TreeView1.SelectedNode, TreeView1.SelectedNode.Value);
}
}
protected void btrep_Click(object sender, EventArgs e)
{
/*********基本验证**************/
string strError = "";
if (txtrepname.Text.Trim() == "")
{
strError += "模块名称不能为空!\\n";
}
//if (txtrepUrl.Text.Trim() == "")
//{
// strError += "模块路径不能为空!\\n";
//}
if (strError != "")
{
ClientScript.RegisterClientScriptBlock(this.GetType(), "", "alert('" + strError + "')", true);
return;
} /*********基本验证结束**************/
Sys_Function fun = new Sys_Function();
fun.ID = this.TreeView1.SelectedNode.Value;
fun.Name = txtrepname.Text;
fun.Url = txtrepUrl.Text;
fun.EveryOne = cbrep.SelectedItem.Value;
int a = fun.Update(); if (a > 0)
{
TreeView1.SelectedNode.Text = this.txtrepname.Text;
TreeView1.SelectedNode.ToolTip = this.txtrepUrl.Text;
this.tableRep.Visible = false;
}
}
}
public class Sys_Function
{
OracleData data=null;
public Sys_Function()
{ }
#region Model
private string _id;
private string _Name;
private string _ParentID;
private string _url;
private int _OrderId;
private string _PicUrl;
private string _everyone;
/// <summary>
/// 编号
/// </summary>
public string ID
{
get { return _id; }
set { _id = value; }
}
/// <summary>
/// 模块名称
/// </summary>
public string Name
{
get { return _Name; }
set { _Name = value; }
}
/// <summary>
/// 父编号
/// </summary>
public string ParentId
{
get { return _ParentID; }
set { _ParentID = value; }
}
/// <summary>
/// 功能地址
/// </summary>
public string Url
{
get { return _url; }
set { _url = value; }
}
/// <summary>
/// 排序
/// </summary>
public int OrderID
{
get { return _OrderId; }
set { _OrderId = value; }
}
/// <summary>
/// 菜单图片地址
/// </summary>
public string PicUrl
{
get { return _PicUrl; }
set { _PicUrl = value; }
}
public string EveryOne
{
get { return _everyone; }
set { _everyone = value; }
}
#endregion
/// <summary>
/// 增加一条数据
/// </summary>
public int Add()
{
data=new OracleData();
StringBuilder strSql=new StringBuilder();
strSql.Append("insert into SYS_FUNCTION(");
strSql.Append("ID,NAME,PARENTID,URL,EVERYONE");
strSql.Append(")");
strSql.Append(" values (");
strSql.Append("'"+ID+"',");
strSql.Append("'"+Name+"',");
strSql.Append("'"+ParentId+"',");
strSql.Append("'"+Url+"',");
strSql.Append("'"+EveryOne+"'");
strSql.Append(")");
return data.ExecuteSQL(strSql.ToString());
} /// <summary>
/// 更新一条数据
/// </summary>
public int Update()
{
data = new OracleData();
StringBuilder strSql=new StringBuilder();
strSql.Append("update SYS_FUNCTION set ");
strSql.Append("NAME='"+Name+"',");
strSql.Append("URL='"+Url+"',");
strSql.Append("EVERYONE='"+EveryOne+"'");
strSql.Append(" where ID='"+ID+"'");
return data.ExecuteSQL(strSql.ToString());
} /// <summary>
/// 删除一条数据
/// </summary>
public int Delete(string ID)
{
data=new OracleData();
StringBuilder strSql=new StringBuilder();
strSql.Append("delete SYS_FUNCTION ");
strSql.Append(" where ID='"+ID+"'");
return data.ExecuteSQL(strSql.ToString());
} /// <summary>
/// 得到一个对象实体
/// </summary>
public void GetModel(string ID)
{
data = new OracleData();
StringBuilder strSql=new StringBuilder();
strSql.Append("select ");
strSql.Append("ID,NAME,PARENTID,URL,ORDERID,PICURL,EVERYONE ");
strSql.Append(" from SYS_FUNCTION ");
strSql.Append(" where ID='"+ID+"'");
DataSet ds=data.GetDataSet(strSql.ToString());
if(ds.Tables[0].Rows.Count>0)
{
Name=ds.Tables[0].Rows[0]["NAME"].ToString();
ParentId=ds.Tables[0].Rows[0]["PARENTID"].ToString();
Url=ds.Tables[0].Rows[0]["URL"].ToString();
if(ds.Tables[0].Rows[0]["ORDERID"].ToString()!="")
{
OrderID=int.Parse(ds.Tables[0].Rows[0]["ORDERID"].ToString());
}
PicUrl=ds.Tables[0].Rows[0]["PICURL"].ToString();
EveryOne=ds.Tables[0].Rows[0]["EVERYONE"].ToString();
}
}
/// <summary>
/// 获得数据列表
/// </summary>
public DataTable GetList(string strWhere)
{
data = new OracleData();
StringBuilder strSql=new StringBuilder();
strSql.Append("select ID,NAME,PARENTID,URL,ORDERID,PICURL,EVERYONE ");
strSql.Append(" FROM SYS_FUNCTION ");
if(strWhere.Trim()!="")
{
strSql.Append(" where "+strWhere);
}
return data.GetDataTable(strSql.ToString());
}
/// <summary>
/// 递归行政区号
/// </summary>
/// <param name="node">初始化节点</param>
/// <param name="sParentID">父节点编号</param>
public void InitTreeNode(TreeNode node, string sParentID)
{
DataView dvw = new DataView();
TreeNode nodTemp;
dvw.Table = GetList("ParentID='" + sParentID + "'");
foreach (DataRowView drv in dvw)
{
nodTemp = new TreeNode();
nodTemp.Value = drv["id"].ToString();
nodTemp.Text = drv["Name"].ToString();
nodTemp.ToolTip = drv["url"].ToString();
DataTable sdt = GetList("ParentID='" + nodTemp.Value + "'");
if (sdt.Rows.Count > 0)
{
nodTemp.ImageUrl = "~/Admin/images/jia.gif";
}
else
{
nodTemp.ImageUrl = "~/Admin/images/jian.gif";
}
node.ChildNodes.Add(nodTemp);
//InitTreeNode(nodTemp, nodTemp.Value);
}
}
}
前面我有说是treeview 啊.
那样服务器负担会不会太大了.
现在功能已经出来了.我用的是updatePanel.
如果用javascript中的ajax,我估计我做不出来.
因为要生成这样一段代码:<table cellpadding="0" cellspacing="0" style="border-width:0;">
<tr>
<td><div style="width:20px;height:1px"></div></td><td><a id="TreeView2n12" href="javascript:TreeView_ToggleNode(TreeView2_Data,12,TreeView2n12,' ',TreeView2n12Nodes)"><img src="/PES.CMS.Web/WebResource.axd?d=i3cF8JjLUc0YN7sa1W4dBIrVplO_6sEf_y0HXesbqQA1&t=633441138476093750" alt="展开 演示组织机构" style="border-width:0;" /></a></td><td><a href="OR/OrganiseList.aspx?OrganiseFatherID=16&OrganiseFatherName=%e6%bc%94%e7%a4%ba%e7%bb%84%e7%bb%87%e6%9c%ba%e6%9e%84" target="ContentIframe" onclick="javascript:TreeView_SelectNode(TreeView2_Data, this,'TreeView2t12');" id="TreeView2t12i" tabindex="-1"><img src="../../Images/Manage/tree/bole.PNG" alt="组织机构" style="border-width:0;" /></a></td><td class="TreeView2_1" style="white-space:nowrap;"><a class="TreeView2_0" href="OR/OrganiseList.aspx?OrganiseFatherID=16&OrganiseFatherName=%e6%bc%94%e7%a4%ba%e7%bb%84%e7%bb%87%e6%9c%ba%e6%9e%84" target="ContentIframe" onclick="javascript:TreeView_SelectNode(TreeView2_Data, this,'TreeView2t12');" id="TreeView2t12">演示组织机构</a></td>
</tr>
</table>
http://blog.csdn.net/brz97/archive/2008/07/01/2600097.aspx