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



posted @ 2007-11-02 18:19  苏康胜  阅读(1097)  评论(0)    收藏  举报