Visual Studio 2005中web.sitemap 中扩展自定义属性的一些应用范例
Web.SiteMap 是 VS2005中一个非常重要的特性. 可以用于菜单等应用,但企业的应用中经常需要控制到 菜单的 target ,菜单的权限等.
通过扩展一些自定义属性可以实现(此方法已经在E8.Net 2.0 工作流应用架构中实现)
sitmap 范例:
<siteMapNode title="主页" url="Newmain.aspx" target="_parent" disenable="true" startIndex="1" AdminIndex="9">
<siteMapNode title="我的桌面" img="skins/2004/images/icon/desktop.gif" menuIndex="1" url ="~\1.aspx">
<siteMapNode title="待办事项" url="~\Forms\frmContent.aspx" description="待办事项" targeturl="" />
<siteMapNode title="我登记事件" url="~\Forms\frmWaittingContent.aspx?TypeContent=MyReg" description="我登记事件"/>
<siteMapNode title="出差授权" url="~\Forms\FrmAgentSet.aspx" description="出差授权"/>
<siteMapNode title="计算器" url="~\Forms\Calculator.htm" description="计算器"/>
<siteMapNode title="万年历" url="~\Forms\wnl.htm" description="万年历"/>
<siteMapNode title="修改密码" url="~\Forms\FrmModuser.aspx" description="修改密码"/>
</siteMapNode>
<siteMapNode title="客户服务" img ="skins/2004/images/icon/sContacts.gif" menuIndex="2" url ="~\2.aspx">
<siteMapNode title="客户服务登记" resourceKey="1824" url="~\Forms\form_all_flowmodel.aspx?appid=1026" description="客户服务登记"/>
<siteMapNode title="客户服务跟踪" resourceKey="1811" url="~\AppForms\CST_Issue_List.aspx" description="客户服务跟踪"/>
<siteMapNode title="抱怨投诉登记" resourceKey="1825" url="~\Forms\form_all_flowmodel.aspx?AppID=320" description="抱怨投诉登记"/>
<siteMapNode title="抱怨投诉查询" resourceKey="207" url="~\AppForms\frm_BYTS_Query.aspx" description="抱怨投诉查询"/>
<siteMapNode title="材料管理" resourceKey="1845" url="~\AppForms\frmMaterial.aspx" description="材料管理"/>
</siteMapNode>

..
</siteMapNode>
</siteMap>
可以看到 这个sitmap中 有 target diseable resourcekey ...等扩展属性 来实现菜单权限控制 及控制方式等
实现代码:
protected void TreeView1_TreeNodeDataBound(object sender, TreeNodeEventArgs e)
{
//节点
SiteMapNode smn = (SiteMapNode)e.Node.DataItem;
string strOpID = smn.ResourceKey;
Epower.ITSM.SqlDAL.UIMethod ui = new Epower.ITSM.SqlDAL.UIMethod();

string strTarget = smn["target"];

if (strTarget != "")
{
e.Node.Target = strTarget;
}


if (strOpID != null && strOpID.Length > 0)
ui.CheckNodeRight(strOpID, e.Node, (Hashtable)Session["UserAllRights"],TreeView1);
}



/// <summary>
/// 如果为false,表示设置为没有权限的菜单移除
/// </summary>
/// <param name="strID"></param>
/// <param name="item"></param>
public void CheckNodeRight(string strID, TreeNode item, Hashtable htAllRights, TreeView TreeView1)
{
long OperatorID = 0;
try
{
OperatorID = long.Parse(strID);
}
catch { }

if (OperatorID == 0)
return;

RightEntity re = (RightEntity)htAllRights[OperatorID];
if (re == null)
return;
else
{
if (re.CanRead == false)
{
//移除菜单项
TreeNode pitem = item.Parent;
if (pitem != null)
{
pitem.ChildNodes.Remove(item);
}
else
{
TreeView1.Nodes.Remove(item);
}
}
}
}

依据同样的方法,可以扩展更多的自定义属性,达到对sitMap 非常丰富的控制和展示逻辑.
E8.Net 工作流 开源架构 提供了全部实现的源码, 2.0下所有应用系统菜单(OUTLOOK风格),实现来自 web.siteMap
欢迎访问更多精彩内容: http://www.feifanit.com.cn/productFlow.htm
通过扩展一些自定义属性可以实现(此方法已经在E8.Net 2.0 工作流应用架构中实现)
sitmap 范例:
<siteMapNode title="主页" url="Newmain.aspx" target="_parent" disenable="true" startIndex="1" AdminIndex="9">
<siteMapNode title="我的桌面" img="skins/2004/images/icon/desktop.gif" menuIndex="1" url ="~\1.aspx">
<siteMapNode title="待办事项" url="~\Forms\frmContent.aspx" description="待办事项" targeturl="" />
<siteMapNode title="我登记事件" url="~\Forms\frmWaittingContent.aspx?TypeContent=MyReg" description="我登记事件"/>
<siteMapNode title="出差授权" url="~\Forms\FrmAgentSet.aspx" description="出差授权"/>
<siteMapNode title="计算器" url="~\Forms\Calculator.htm" description="计算器"/>
<siteMapNode title="万年历" url="~\Forms\wnl.htm" description="万年历"/>
<siteMapNode title="修改密码" url="~\Forms\FrmModuser.aspx" description="修改密码"/>
</siteMapNode>
<siteMapNode title="客户服务" img ="skins/2004/images/icon/sContacts.gif" menuIndex="2" url ="~\2.aspx">
<siteMapNode title="客户服务登记" resourceKey="1824" url="~\Forms\form_all_flowmodel.aspx?appid=1026" description="客户服务登记"/>
<siteMapNode title="客户服务跟踪" resourceKey="1811" url="~\AppForms\CST_Issue_List.aspx" description="客户服务跟踪"/>
<siteMapNode title="抱怨投诉登记" resourceKey="1825" url="~\Forms\form_all_flowmodel.aspx?AppID=320" description="抱怨投诉登记"/>
<siteMapNode title="抱怨投诉查询" resourceKey="207" url="~\AppForms\frm_BYTS_Query.aspx" description="抱怨投诉查询"/>
<siteMapNode title="材料管理" resourceKey="1845" url="~\AppForms\frmMaterial.aspx" description="材料管理"/>
</siteMapNode>
..
</siteMapNode>
</siteMap>可以看到 这个sitmap中 有 target diseable resourcekey ...等扩展属性 来实现菜单权限控制 及控制方式等
实现代码:
protected void TreeView1_TreeNodeDataBound(object sender, TreeNodeEventArgs e)
{
//节点
SiteMapNode smn = (SiteMapNode)e.Node.DataItem;
string strOpID = smn.ResourceKey;
Epower.ITSM.SqlDAL.UIMethod ui = new Epower.ITSM.SqlDAL.UIMethod();
string strTarget = smn["target"];
if (strTarget != "")
{
e.Node.Target = strTarget;
}

if (strOpID != null && strOpID.Length > 0)
ui.CheckNodeRight(strOpID, e.Node, (Hashtable)Session["UserAllRights"],TreeView1);
}


/// <summary>
/// 如果为false,表示设置为没有权限的菜单移除
/// </summary>
/// <param name="strID"></param>
/// <param name="item"></param>
public void CheckNodeRight(string strID, TreeNode item, Hashtable htAllRights, TreeView TreeView1)
{
long OperatorID = 0;
try
{
OperatorID = long.Parse(strID);
}
catch { }
if (OperatorID == 0)
return;
RightEntity re = (RightEntity)htAllRights[OperatorID];
if (re == null)
return;
else
{
if (re.CanRead == false)
{
//移除菜单项
TreeNode pitem = item.Parent;
if (pitem != null)
{
pitem.ChildNodes.Remove(item);
}
else
{
TreeView1.Nodes.Remove(item);
}
}
}
}

依据同样的方法,可以扩展更多的自定义属性,达到对sitMap 非常丰富的控制和展示逻辑.
E8.Net 工作流 开源架构 提供了全部实现的源码, 2.0下所有应用系统菜单(OUTLOOK风格),实现来自 web.siteMap
欢迎访问更多精彩内容: http://www.feifanit.com.cn/productFlow.htm
浙公网安备 33010602011771号