仓酷云

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

[学习教程] ASP.NET编程:asp.net 2.0 权限树的把持

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

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

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

x
是不是实质都是API?有的好像不只是API那么简单的,有的也是一种框架就像MFC一样。有的还是一种思想(就是做软件的思想)(好像很深奥,其实我也不懂^_^)asp.net|把持做权限的时分,次要完成以下功效
1、该节点能够会见,则他的父节点也必能会见;
  2、该节点能够会见,则他的子节点也都能会见;
  3、该节点不成会见,则他的子节点也不克不及会见。
利用带CheckBox的数型布局能失掉很好的用户体验,但是编程的难度也是有点增添,假如全体有服务端来完成,那点下刷下,一定不可,只能利用javascript,javascript调试的时分忧郁的很,一个字类,另有忧郁的递回,贫苦
我之前是利用以下该办法
<scriptlanguage="javascript">
<!--
//初始化节点
initchecknode(document.all("tvItemClientID").value,document.all("checked").value)

//初始化选中节点
functioninitchecknode(tree,tvvalue)
{
//取得必要初始化选择形态的节点的字符串.
varselectedNodes=tvvalue;
vararrayNodes=newArray();
arrayNodes=selectedNodes.split(",");
varAllRootNode=newArray();
AllRootNode=document.getElementById(tree).getChildren();
//初始化选择的节点
findAndCheckedNodes(AllRootNode,arrayNodes);
}
//依据已选择的节点的字符串初始化选择的节点
functionfindAndCheckedNodes(NodeArray,nodeDatas)
{
//alert(NodeArray.length);
if(parseInt(NodeArray.length)==0)
{
return;
}
else
{
for(vari=0;i<parseInt(NodeArray.length);i++)
{
varcNode,nodeData;
cNode=NodeArray[i];
////假如该节点在nodeDatas里则初始化checked=true;
nodeData=cNode.getAttribute("NodeData");
for(varj=0;j<nodeDatas.length;j++)
{
if(nodeDatas[j]==nodeData)
{
cNode.setAttribute("checked","true");
break;
}
}
//假如有子节点,则持续递回
if(parseInt(cNode.getChildren().length)!=0)
findAndCheckedNodes(cNode.getChildren(),nodeDatas);
}
}
}
//-->
//oncheck事务
functiontree_oncheck(tree)
{
vari;
varnode=tree.getTreeNode(tree.clickedNodeIndex);
varPchecked=tree.getTreeNode(tree.clickedNodeIndex).getAttribute("checked");
setcheck(node,Pchecked);
setParent(node,Pchecked);
//window.alert(Pchecked);
document.all.checked.value="";
if(tree.getChildren().length>0)
{
for(i=0;i<=tree.getChildren().length-1;i++)
{
if(tree.getChildren()[i].getAttribute("Checked"))
{
AddChecked(tree.getChildren()[i]);
}
FindCheckedFromNode(tree.getChildren()[i]);
}
}
}
//设置子节点选中
functionsetcheck(node,Pchecked)
{
vari;
varChildNode=newArray();
ChildNode=node.getChildren();

if(parseInt(ChildNode.length)==0)
{
return;
}
else
{
for(i=0;i<ChildNode.length;i++)
{
varcNode;
cNode=ChildNode[i];
cNode.setAttribute("Checked",Pchecked);
//cNode.Checked=Pchecked;
if(parseInt(cNode.getChildren().length)!=0)
{
setcheck(cNode,Pchecked);
}
}
}
}
//设置子节点选中/作废;
//同时必要设置父节点的形态(假如是作废选中的话,仅仅设置本节点及其一切字接点,不触及父接点)
functionsetParent(node,Pc)
{
varparentNode=node.getParent();

if(parentNode)
{

varparentNodeFather=parentNode.getParent();

if(parentNodeFather)
{
setParent(parentNode,Pc);
}
if(Pc)
{parentNode.setAttribute("checked",Pc);}
else
{
checkBrother(parentNode,Pc,node.getAttribute("NodeData"))
}
}
}
//反省子接点是不是有选择的,假如有一个选择了,那前往true
//只查第一级节点.
functioncheckBrother(parentNode,Pc,NodeData)
{
varchildNodes=newArray();
childNodes=parentNode.getChildren();
if(childNodes.length>0)
{
varbChecked=true;
for(vari=0;i<childNodes.length;i++)
{
if(childNodes[i].getAttribute("checked")==true&&childNodes[i].getAttribute("NodeData")!=NodeData)
{
//alert(i+childNodes[i].getAttribute("Text"));
bChecked=false;
break;
}
}
if(bChecked)
{
parentNode.setAttribute("checked",Pc);
}
else
{
//一切父结点选择
setParent(parentNode,!Pc)
}
}
else
{
parentNode.setAttribute("checked",Pc);
}
}
//猎取一切节点形态
functionFindCheckedFromNode(node)
{
vari=0;
varnodes=newArray();
nodes=node.getChildren();

for(i=0;i<=nodes.length-1;i++)
{
if(nodes[i].getAttribute("Checked"))
{
AddChecked(nodes[i]);
}
if(parseInt(nodes[i].getChildren().length)!=0)
{
FindCheckedFromNode(nodes[i]);
}
}
}
//增加选中节点
functionAddChecked(node)
{
document.all.checked.value+=node.getAttribute("NodeData")+",";
}
//-->
</script>这类办法有个很年夜的成绩,就是他客户端设置的CheckBox在服务器端是不克不及猎取的,如今只能在Check的时分遍历树,并把Checked的值放在一个文本里,然后提交到服务器,然后服务器来剖析1@2@这类字符
如今我利用的是asp.net2.0,利用的是以下的办法
functionpublic_GetParentByTagName(element,tagName)
{
varparent=element.parentNode;
varupperTagName=tagName.toUpperCase();
//假如这个元素还不是想要的tag就持续上溯
while(parent&&(parent.tagName.toUpperCase()!=upperTagName))
{
parent=parent.parentNode?parent.parentNode:parent.parentElement;
}
returnparent;
}
//设置节点的父节点Cheched――该节点可会见,则他的父节点也必能会见
functionsetParentChecked(objNode)
{
varobjParentDiv=public_GetParentByTagName(objNode,"div");
if(objParentDiv==null||objParentDiv=="undefined")
{
return;
}
varobjID=objParentDiv.getAttribute("ID");
objID=objID.substring(0,objID.indexOf("Nodes"));
objID=objID+"CheckBox";
varobjParentCheckBox=document.getElementById(objID);
if(objParentCheckBox==null||objParentCheckBox=="undefined")
{
return;
}
if(objParentCheckBox.tagName!="INPUT"&&objParentCheckBox.type=="checkbox")
return;
objParentCheckBox.checked=true;
setParentChecked(objParentCheckBox);
}
//设置节点的子节点uncheched――该节点不成会见,则他的子节点也不克不及会见
functionsetChildUnChecked(divID)
{
varobjchild=divID.children;
varcount=objchild.length;
for(vari=0;i<objchild.length;i++)
{
vartempObj=objchild[i];
if(tempObj.tagName=="INPUT"&&tempObj.type=="checkbox")
{
tempObj.checked=false;
}
setChildUnChecked(tempObj);
}
}
//设置节点的子节点cheched――该节点能够会见,则他的子节点也都能会见
functionsetChildChecked(divID)
{
varobjchild=divID.children;
varcount=objchild.length;
for(vari=0;i<objchild.length;i++)
{
vartempObj=objchild[i];
if(tempObj.tagName=="INPUT"&&tempObj.type=="checkbox")
{
tempObj.checked=true;
}
setChildChecked(tempObj);
}
}
//触发事务
functionCheckEvent()
{
varobjNode=event.srcElement;
if(objNode.tagName!="INPUT"||objNode.type!="checkbox")
return;
if(objNode.checked==true)
{
setParentChecked(objNode);
varobjID=objNode.getAttribute("ID");
varobjID=objID.substring(0,objID.indexOf("CheckBox"));
varobjParentDiv=document.getElementById(objID+"Nodes");
if(objParentDiv==null||objParentDiv=="undefined")
{
return;
}
setChildChecked(objParentDiv);
}
else
{
varobjID=objNode.getAttribute("ID");
varobjID=objID.substring(0,objID.indexOf("CheckBox"));
varobjParentDiv=document.getElementById(objID+"Nodes");
if(objParentDiv==null||objParentDiv=="undefined")
{
return;
}
setChildUnChecked(objParentDiv);
}
}这类办法最年夜的优点就是服务端能得javascript设置的Checked的值,不必没点下就全体把树遍利下,间接在服务端遍利一次就好了
//遍历子节点
publicvoidGetChildNode(TreeNodeNode)
{
foreach(TreeNodenodeinNode.ChildNodes)
{
if(node.Checked)
{
StrChecked+=node.Value+"@";
}
GetChildNode(node);
}
}
}我还是能失掉它的Check的值
呵呵,那你就关注微软的招聘信息以及别人的招聘经验啊,还有也不一定去做技术的,你如果真的想去就多了解了解。(其实我的意思是说想到微软做技术是很不容易的。
飘灵儿 该用户已被删除
沙发
发表于 2015-1-17 05:54:13 | 只看该作者
Asp.net脚本的出现,为ASP空间带来了更高的稳定性,同时也为程序员建站提供更高环境!
若天明 该用户已被删除
板凳
发表于 2015-1-20 12:54:12 | 只看该作者
asp.net空间的支持有:ASP.NET1.1/虚拟目录/MicrosoftFrontPage2000扩展/CDONTS,同时他的网站上也提供了Asp.net的使用详解和程序源代码,相信对使用ASP.NET编程的程序员来说会非常有用哦!
小魔女 该用户已被删除
地板
发表于 2015-1-29 07:10:19 | 只看该作者
虽然在形式上JSP和ASP或PHP看上去很相似——都可以被内嵌在HTML代码中。但是,它的执行方式和ASP或PHP完全不同。在JSP被执行的时候,JSP文件被JSP解释器(JSPParser)转换成Servlet代码,然后Servlet代码被Java编译器编译成.class字节文件,这样就由生成的Servlet来对客户端应答。所以,JSP可以看做是Servlet的脚本语言(ScriptLanguage)版。
只想知道 该用户已被删除
5#
发表于 2015-2-5 23:59:28 | 只看该作者
PHP的源代码完全公开,在OpenSource意识抬头的今天,它更是这方面的中流砥柱。不断地有新的函数库加入,以及不停地更新,使得PHP无论在UNIX或是Win32的平台上都可以有更多新的功能。它提供丰富的函数,使得在程式设计方面有着更好的资源。目前PHP的最新版本为4.1.1,它可以在Win32以及UNIX/Linux等几乎所有的平台上良好工作。PHP在4.0版后使用了全新的Zend引擎,其在最佳化之后的效率,比较传统CGI或者ASP等技术有了更好的表现。
再现理想 该用户已被删除
6#
发表于 2015-2-14 09:51:47 | 只看该作者
ASP在执行的时候,是由IIS调用程序引擎,解释执行嵌在HTML中的ASP代码,最终将结果和原来的HTML一同送往客户端。
7#
发表于 2015-3-4 05:34:19 | 只看该作者
弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。
金色的骷髅 该用户已被删除
8#
发表于 2015-3-11 17:32:04 | 只看该作者
Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。
精灵巫婆 该用户已被删除
9#
发表于 2015-3-19 03:52:53 | 只看该作者
Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。
小妖女 该用户已被删除
10#
发表于 2015-3-27 07:10:56 | 只看该作者
ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-22 23:48

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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