在框架中,左边有一颗树(还有其他内容),在右边增加一个树节点后,在左边要及时显示的.
因为要保持左边某些节点状态,所以左边只能局部刷新.
请问大家怎么刷新??

解决方案 »

  1.   

    用Ajax Extensions里的定时器定时刷新
      

  2.   

    在这里下载:
    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。网上有很多资料你可以看一下
      

  3.   

    如果你的树是自己用JS实现的,那么你现在要实现这个当然也就很容易了,如果不是这样的。你可能就需要用
    UpdatePanel来实现。
      

  4.   

    左边的树是结点在第一次加载之后用Session保存起来(用DataTable /Array)。右边加结点时,对Session中保存的内容进行操作,之后加一条刷新左边的JS 脚本
     ClientScript.RegisterClientScriptBlock(GetType(), "", "<script>window.parent.frames.左边边框名.location.href = '左边页'; </script>") 左边会对Session 内容重新加载
      

  5.   

    我没有用ajax.
    不用updatepanel能实现吗.
      

  6.   

    树就是treeview.用js 估计是很难实现左边树刷新的.
      

  7.   

    右边节点增加完,刷新左边的框架,重新提取数据。
    parent.左边框架名.window.location.reload();
      

  8.   


    reload()我用过了.
    问题是: 我左边页面其他节点状态就不能保持了.
      

  9.   

    用ajax
     把你的树的节点写到xml里面去
    然后树的状态使用JS控制
    在把整个框架的大概设定号
    至于点击后局部刷新..使用一个异步传参
    把左边树节点做为参数传递给右方,把右面坐为一个单独页面
      

  10.   


    能说得详细一点吗?还有用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&amp;t=633441138476093750" alt="展开 演示组织机构" style="border-width:0;" /></a></td><td><a href="OR/OrganiseList.aspx?OrganiseFatherID=16&amp;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&amp;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>
      

  11.   

    感觉用js很难实现.
    用ajax 怎么做,有谁给个解决方案!
      

  12.   

    在操作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" />&nbsp;
                            <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>
      

  13.   

    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;
            }
        }
    }
      

  14.   

    不知道楼主所说的树是asp.net的treeview控件,还是javascript的树,这个你得说清楚啊。
      

  15.   

    单类实体:
    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);
            }
        }
    }
      

  16.   


    前面我有说是treeview 啊.
      

  17.   

    用ajax不就要定时取回发了吗?
    那样服务器负担会不会太大了.
      

  18.   

    呵呵,建议楼主还是用javascript中的ajax来做吧,微软的ajax.net很让你讨厌的
      

  19.   

    updatepanel难道不用回发吗????而且每次回发都是整页回发,服务器负担更大
      

  20.   


    现在功能已经出来了.我用的是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&amp;t=633441138476093750" alt="展开 演示组织机构" style="border-width:0;" /></a></td><td><a href="OR/OrganiseList.aspx?OrganiseFatherID=16&amp;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&amp;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>
      

  21.   

    呵呵,建议楼主去看看
    http://blog.csdn.net/brz97/archive/2008/07/01/2600097.aspx