再见西城 发表于 2015-1-16 22:47:23

ASP.NET编程:asp.net 2.0 权限树的把持

是不是实质都是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;
////假如该节点在nodeDatas里则初始化checked=true;
nodeData=cNode.getAttribute("NodeData");
for(varj=0;j<nodeDatas.length;j++)
{
if(nodeDatas==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().getAttribute("Checked"))
{
AddChecked(tree.getChildren());
}
FindCheckedFromNode(tree.getChildren());
}
}
}
//设置子节点选中
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;
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.getAttribute("checked")==true&&childNodes.getAttribute("NodeData")!=NodeData)
{
//alert(i+childNodes.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.getAttribute("Checked"))
{
AddChecked(nodes);
}
if(parseInt(nodes.getChildren().length)!=0)
{
FindCheckedFromNode(nodes);
}
}
}
//增加选中节点
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;
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;
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)版。

只想知道 发表于 2015-2-5 23:59:28

PHP的源代码完全公开,在OpenSource意识抬头的今天,它更是这方面的中流砥柱。不断地有新的函数库加入,以及不停地更新,使得PHP无论在UNIX或是Win32的平台上都可以有更多新的功能。它提供丰富的函数,使得在程式设计方面有着更好的资源。目前PHP的最新版本为4.1.1,它可以在Win32以及UNIX/Linux等几乎所有的平台上良好工作。PHP在4.0版后使用了全新的Zend引擎,其在最佳化之后的效率,比较传统CGI或者ASP等技术有了更好的表现。

再现理想 发表于 2015-2-14 09:51:47

ASP在执行的时候,是由IIS调用程序引擎,解释执行嵌在HTML中的ASP代码,最终将结果和原来的HTML一同送往客户端。

仓酷云 发表于 2015-3-4 05:34:19

弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。

金色的骷髅 发表于 2015-3-11 17:32:04

Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。

精灵巫婆 发表于 2015-3-19 03:52:53

Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。

小妖女 发表于 2015-3-27 07:10:56

ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象。
页: [1]
查看完整版本: ASP.NET编程:asp.net 2.0 权限树的把持