母版页中使用了treeview,点击时如何只刷新内容页,而不刷新母版页?

铁血男儿007 2009-12-12 11:14:52
最近在开发一个管理系统时,遇到了这样一个问题:

我在母版页中使用了treeview,不同的节点链接到不同的内容页,每次点击时总是刷新整个页面,我希望只刷新内容页,而套用的母版页不被刷新。

我也试过用Frame框架来做,但是因为在该系统当中必须要控制用户的权限,不同角色的用户名登录进去以后,treeview显示的菜单项是不同的,根据权限的高低,有的多有的少,如果我用框架来做,必须要在left.aspx中把超链接写死,也就是说不能用树视图,这样的话,权限就无法控制了。

(补充说明:treeview中的菜单项是动态加载的,需要判断权限,然后读取数据库,“菜单名称”和“菜单URL”都是“权限表”里的字段,不能够直接在左边的框架里写死)

如何既能够实现局部刷新,又能够控制用户权限

请问各位高手,有什么好的解决方法吗?
...全文
2973 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
yonghua_IT 2012-04-07
  • 打赏
  • 举报
回复
楼主,能不能给我一份那个母版页面和内容页的代码那块啊。。。

谢谢!(我现在正在做这个,出了点小问题)

yonghuazeng@qq.com
blzycxmzyt 2012-03-12
  • 打赏
  • 举报
回复
我也遇到这个问题
yaogege1984 2012-02-14
  • 打赏
  • 举报
回复
我正遇到这个问题
longdeng001 2011-11-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ithingcan 的回复:]
如需要阅读该回复,请登录或注册CSDN!
[/Quote]ghj
wangfen911127 2011-11-01
  • 打赏
  • 举报
回复
我想知道Iframe放在哪里,帮帮忙,
xiaoqian1234 2011-09-19
  • 打赏
  • 举报
回复
学习了
ytht_wjh123 2011-09-08
  • 打赏
  • 举报
回复
楼主能把你做的源码给我一份吗?我不知道IFRAME放在哪里
ytht_wjh@163.com
wjk_chance_Me 2011-03-03
  • 打赏
  • 举报
回复
楼主,能不能给我一份那个母版页面的代码和treeview实现权限那块啊。。。

谢谢!(我现在正在做这个,出了点小问题)
lanniao10 2011-01-14
  • 打赏
  • 举报
回复
楼主能把你做的源码给我一份吗?我不知道IFRAME放在哪里
hanjihong21 2010-10-08
  • 打赏
  • 举报
回复
登录;了怎么也不能看,8楼!
pk51085 2010-03-18
  • 打赏
  • 举报
回复
8楼真lj
kingmaxwin 2010-02-24
  • 打赏
  • 举报
回复
不知道,帮顶!不知道,帮顶!
追寻风的自由 2009-12-13
  • 打赏
  • 举报
回复
就是你在绑定TreeView节点同时给他绑定个target属性呢?
这个属性指向IFrame的Name
行不行呢?
铁血男儿007 2009-12-13
  • 打赏
  • 举报
回复
我是用VS2005+SQLServer2005开发的,采用三层架构,其中SysFun是Model层中的实体类,对应了数据库中同名的表,SysFun.cs(菜单节点类)的代码如下:


using System;
using System.Collections.Generic;
using System.Text;

namespace WeiYu.Model
{
/// <summary>
/// 菜单节点类
/// </summary>
[Serializable]
public class SysFun
{
private int nodeId;//菜单节点id
private string displayName;//菜单名称
private string nodeURL;//菜单连接地址
private int displayOrder;//菜单显示顺序
private int parentNodeId;//父节点id

public int NodeId
{
get { return nodeId; }
set { nodeId = value; }
}
public string DisplayName
{
get { return displayName; }
set { displayName = value; }
}
public string NodeURL
{
get { return nodeURL; }
set { nodeURL = value; }
}
public int DisplayOrder
{
get { return displayOrder; }
set { displayOrder = value; }
}
public int ParentNodeId
{
get { return parentNodeId; }
set { parentNodeId = value; }
}
}
}
铁血男儿007 2009-12-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ithingcan 的回复:]
你先说说你TreeView是怎么绑定的?
[/Quote]

源代码如下:

前台写的比较简单,TreeView直接放在母版页里,没有采用用户控件,


<div id="divMenu" runat="server" align="center" style="width: 160px; height:385px; background-color: #6dc7fc">
<div style="width: 120px; height: 20px"></div>
<div style="width: 140px;">
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:TreeView ID="TVSysFun" runat="server" ExpandDepth="0" align="left"></asp:TreeView>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</div>


后台绑定:


public void DisplayUserMenu(UserInfo user)
{
this.TVSysFun.Nodes.Clear();
//得到系统菜单表中所有的第一级菜单
IList<SysFun> parentSysFun = SysFunManager.GetAllParentNodeInfoByUserId(user);
foreach (SysFun sfParent in parentSysFun)
{
//得到第一层节点的Id
string nodeId = sfParent.NodeId.ToString();
//得到第一层节点的显示名称
string displayName = sfParent.DisplayName;
//根据节点信息创建一层节点
TreeNode fatherNode = CreateTreeNode(displayName, nodeId, "", "~/images/menuclose.gif");
CreateChildTree(nodeId, user, fatherNode);
this.TVSysFun.Nodes.Add(fatherNode);
//选中的子菜单其父节点打开
}

if (Request.QueryString["NodeId"] != null)
{
string NodeId = Request.QueryString["NodeId"];
//选中的子菜单其父节点打开
if (NodeId != "" && NodeId.Length > 3)
{
foreach (TreeNode treeNode in this.TVSysFun.Nodes)
{
if (NodeId.IndexOf(treeNode.Value.ToString()) == 0)
{
treeNode.Expand();
}
}
}
}
}

private TreeNode CreateTreeNode(string strText, string strId, string strUrl, string strImage)
{
TreeNode newNode = new TreeNode();
newNode.Text = strText;
newNode.Value = strId;
if (strId != "")
{
newNode.NavigateUrl = strUrl + "?NodeId=" + strId;
}
else
{
newNode.NavigateUrl = strUrl;
}
newNode.ImageUrl = strImage;
return newNode;
}

//创建第二级节点
public void CreateChildTree(string nodeId, UserInfo user, TreeNode fatherNode)
{
//在三层下实现获得父级节点为nodeId的所有子节点
IList<SysFun> childSysFun = SysFunManager.GetSysFunByParentNodeIdAndUserId(user, int.Parse(nodeId));
foreach (SysFun sfChild in childSysFun)
{
//得到第二层节点Id
string childNodeId = sfChild.NodeId.ToString();
//得到第二层节点的显示名称
string childDisplayName = sfChild.DisplayName;
//将路径转换为客户端可用的URL
string nodeURL = ResolveUrl(sfChild.NodeURL.ToString().Trim());
//根据节点信息,创建第二层节点
TreeNode childNode = CreateTreeNode(childDisplayName, childNodeId, nodeURL, "~/images/CloseTree.gif");
//将子节点加入到父节点中
AddTree(fatherNode, childNode);
}
}

//将子节点加入到父节点中
private void AddTree(TreeNode fatherNode, TreeNode childNode)
{
fatherNode.ChildNodes.Add(childNode);
}
追寻风的自由 2009-12-13
  • 打赏
  • 举报
回复
你看这样行不?

/// <summary>
/// 绑定树控件
/// </summary>
public void BindTreeView()
{
string ID = Session["ID"].ToString();
UserLoginState bll = new UserLoginState();
DataSet ds = bll.GetTree(ID);
ViewState["ds"] = ds;
BindRoot(ds);
}

/// <summary>
/// 绑定根节点
/// </summary>
/// <param name="ds"></param>
private void BindRoot(DataSet ds)
{
//获得最外层节点
DataRow[] dr = ds.Tables[0].Select("ParentNodeId=0");
foreach (DataRow r in dr)
{
TreeNode tn = new TreeNode();
tn.Text = r[1].ToString();
string str = r[0].ToString();
TreeView1.Nodes.Add(tn);
TreeView1.ExpandAll();
//调用添加子节点方法
AddChildNode(ds, tn, str);
}
}
/// <summary>
/// 子节点添加方法
/// </summary>
/// <param name="ds">数据集</param>
/// <param name="tn">当前节点对象</param>
private void AddChildNode(DataSet ds, TreeNode tn, string str)
{
DataRow[] dr = ds.Tables[0].Select("ParentNodeId=" + str);
foreach (DataRow r in dr)
{
TreeNode tc = new TreeNode();
tc.Text = r[1].ToString();
string s = r[0].ToString();
tc.NavigateUrl = r[2].ToString();
tn.ChildNodes.Add(tc);
tc.Target = "IFrame控件的Name(设定IFrame的Name,不是ID)";
//递归调用
AddChildNode(ds, tc, s);
}
}
追寻风的自由 2009-12-13
  • 打赏
  • 举报
回复
你先说说你TreeView是怎么绑定的?
追寻风的自由 2009-12-13
  • 打赏
  • 举报
回复
楼上真乃神人也
wuyq11 2009-12-13
  • 打赏
  • 举报
回复
List<SysFun> lst=new SysFun<SysFun>();
递归绑定到treeview
设置节点连接属性
TreeNode1.NavigateUrl = "javascript:window.top.getElementById['rightframe'].location.href=''"
<asp:ScriptManager runat="server">
</asp:ScriptManager>
<asp:UpdatePanel runat="server" ID="update1">
<ContentTemplate>

</ContentTemplate>
</asp:UpdatePanel>
Helling 2009-12-13
  • 打赏
  • 举报
回复
不知道,帮顶!
加载更多回复(7)

62,263

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧