仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 616|回复: 7
打印 上一主题 下一主题

[学习教程] ASP.NET编程:利用asp.net2.0中的SiteMap中的一些成绩...

[复制链接]
分手快乐 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:35:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
也许C#刚上市的时候有些抄袭Java吧,但自从C#2.0上市之后,整个局面就扭转乾坤了,不但Java在模仿C#,而且他从来都没能跟得上C#的脚步。asp.net|sitemap|成绩SiteMap,网站舆图,在网站建立的时分是很有效的。它能够间接绑定在Men和TreeView控件上,另有一个唆使以后路径的SiteMapPath控件,也能够间接绑定。
这是他经常使用的xml界说:
<siteMapNodeurl="Course/Group/GroupList.aspx"title="GroupAdmin">
这个SiteMap的权限已和Membership分离起来了,分歧权限的用户所看到的舆图已被把持了。能够设置role属性来扩大破例的会见允许。注重,是破例的会见允许。
<siteMapNodeurl="Course/Tests/TestList.aspx"title="TestAdmin"role="student">这里有些先容:http://zmsx.cnblogs.com/archive/2006/01/03/310381.aspx
复杂的利用这里不作赘述,只是会商一下怎样和扩大一下,让他能够会见资本时附带参数。
起首先容如许一个资本:MySiteMapTool:http://quitgame.cnblogs.com/archive/2005/11/24/283910.aspx
这位仁兄已供应了一个工具,能够在程序直达发带参数的哀求
好比:MySiteMap.Forward("Details","AlbumID={0}&Page={1}",1,4);
确是复杂有用。
如今想要的功效是:由于各个液面都必要分歧的参数,以是在没有这些参数的情形下就克制用户会见谁人页面,转而会见父一级页面,递回。
起首,SiteMap自己有个SiteMapResolve事务,在以后路径被剖析时触发,这是一段来自MSDN的代码
privatevoidPage_Load(objectsender,EventArgse)
{
//TheExpandForumPathsmethodiscalledtohandle
//theSiteMapResolveevent.
SiteMap.SiteMapResolve+=
newSiteMapResolveEventHandler(this.ExpandForumPaths);
}
privateSiteMapNodeExpandForumPaths(Objectsender,SiteMapResolveEventArgse)
{
//ThecurrentnoderepresentsaPostpageinabulletinboardforum.
//Clonethecurrentnodeandallofitsrelevantparents.This
//returnsasitemapnodethatadevelopercanthen
//walk,modifyingeachnode.Urlpropertyinturn.
//Sincetheclonednodesareseparatefromtheunderlying
//sitenavigationstructure,thefixupsthataremadedonot
//effecttheoverallsitenavigationstructure.
SiteMapNodecurrentNode=SiteMap.CurrentNode.Clone(true);
SiteMapNodetempNode=currentNode;
//ObtaintherecentIDs.
intforumGroupID=GetMostRecentForumGroupID();
intforumID=GetMostRecentForumID(forumGroupID);
intpostID=GetMostRecentPostID(forumID);
//Thecurrentnode,anditsparents,canbemodifiedtoinclude
//dynamicquerystringinformationrelevanttothecurrently
//executingrequest.
if(0!=postID)
{
tempNode.Url=tempNode.Url+"?PostID="+postID.ToString();
}
if((null!=(tempNode=tempNode.ParentNode))&&
(0!=forumID))
{
tempNode.Url=tempNode.Url+"?ForumID="+forumID.ToString();
}
if((null!=(tempNode=tempNode.ParentNode))&&
(0!=forumGroupID))
{
tempNode.Url=tempNode.Url+"?ForumGroupID="+forumGroupID.ToString();
}
returncurrentNode;
}
这段代码只是给以后路径加载参数。
已经实验过利用相似的办法,可是SiteMapPath弄定了,Menu就绑定不上数据了。而且只能处置一部分数据。

厥后,分离SiteMapTool谁人类,又写出几个函数能够办理这个成绩
这是修正以后的sitemap文件,加了一个设置项:rule,内里的参数是这个页面必要的参数。假如以后高低文没有这些参数,那末克制用户会见这个页面。
<siteMapNodeurl="Course/Group/GroupDetail.aspx"title="GroupDetail"rule="cid;gid">
这是两个函数,递回处置一切的路径。privatestringMakeURL(SiteMapNodenode)
{
node.ReadOnly=false;
//findthestaticurl
stringurl=MySiteMap.FindForward(node.Title);
if(node["rule"]!=null&&node["rule"].Length>0)
{
//ifhavetherule,thencheck
string[]paramSet=node["rule"].Split(;);
//check
for(inti=0;i<paramSet.Length;i++)
{
//ifrequesthavenotsuchaparam,theninvokeselftocheckhisparent
if(HttpContext.Current.Request.Params[paramSet[i]]==null)
returnMakeURL(node.ParentNode);
}
//ifpass,thenaddalltheparamsandreturnthevalue
url+="?";
for(inti=0;i<paramSet.Length;i++)
{
stringkey=paramSet[i];
//cid--->cid=1.theformerformatislike:rule=cid;tid
url=url+key+"="+HttpContext.Current.Request.Params[key]+"&";
}
returnurl.Substring(0,url.Length-1);//removelast&
}
else
{
//ifthereisnorulethenreturntheurldirectly
returnurl;
}
}privatevoidReBindData(SiteMapNoderoot)
{
stringurl=MakeURL(root);
if(url!="")
root.Url=url;
for(inti=0;i<root.ChildNodes.Count;i++)
{
ReBindData(root.ChildNodes[i]);
}
}在ReBindData内里递回挪用MakeUrl函数。
MakeUrl函数内里挪用的MySiteMap.FindForward函数就是来自那位http://quitgame.cnblogs.com/archive/2005/11/24/283910.aspx的完成。
不外使用的是后必要做一些修改:他本来的完成是用静态的类云云加载
//SiteMapNodeCollectionsmc=SiteMap.RootNode.GetAllNodes();
//siteMapCol=newNameValueCollection();
//IEnumeratorie=smc.GetEnumerator();
//while(ie.MoveNext())
//{
//siteMapCol[((SiteMapNode)ie.Current).Title]=((SiteMapNode)ie.Current).Url;
//}可是,因为用户在没有上岸的时分,限于权限,它能会见的页面无限,以是SiteMap.RootNode.GetAllNodes();失掉的不是一切数据,大概只是一部分大概0。
修改体例就是本人写一个函数,间接读取xml文件,递回猎取一切数据界说。
出处:BLOG为所欲为
竟发现没有太大的帮助。总觉得要用起来,感觉到不了位。因为公司机器的原因,一直没有安装vs.net(也从来没有用过)。以前做asp的时候一直用DW(感觉其代码联想功能不错),可现在到了asp.net却不习惯了。
老尸 该用户已被删除
沙发
发表于 2015-1-19 17:51:12 | 只看该作者
在一个项目中谁敢保证每天几千万甚至几亿条的数据不丢失?谁敢保证应用的高可靠性?有可以借签的项目吗?
再见西城 该用户已被删除
板凳
发表于 2015-1-24 15:38:07 | 只看该作者
市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。
冷月葬花魂 该用户已被删除
地板
发表于 2015-2-1 21:44:12 | 只看该作者
我的意思是.net好用,从功能上来说比JAVA强还是很明显的。
柔情似水 该用户已被删除
5#
发表于 2015-2-7 15:36:28 | 只看该作者
目前在微软的.net战略中新推出的ASP.net借鉴了Java技术的优点,使用CSharp(C#)语言作为ASP.net的推荐语言,同时改进了以前ASP的安全性差等缺点。但是,使用ASP/ASP.net仍有一定的局限性,因为从某种角度来说它们只能在微软的WindowsNT/2000/XP+IIS的服务器平台上良好运行(虽然像ChilliSoft提供了在UNIX/Linux上运行ASP的解决方案.
若天明 该用户已被删除
6#
发表于 2015-3-7 00:10:35 | 只看该作者
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
愤怒的大鸟 该用户已被删除
7#
发表于 2015-3-13 23:09:31 | 只看该作者
网页从开始简单的hmtl到复杂的服务语言,走过了10多个年头,各种技术层出不穷,单个的主流技术也在不断翻新的版本,现在分析下各种语言的区别、优势、劣势、开发注意事项!
金色的骷髅 该用户已被删除
8#
发表于 2015-3-20 21:32:31 | 只看该作者
是指转换后的Servlet程序代码的行数。这给调试代码带来一定困难。所以,在排除错误时,可以采取分段排除的方法(在可能出错的代码前后输出一些字符串,用字符串是否被输出来确定代码段从哪里开始出错)。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2025-2-23 10:15

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表