这一步分三小步:
(1).标出界面所要分派权限的元素
(2).扫描界面猎取所要分派权限的元素信息。(ID,题目,层级关联)
(3).存入数据库中。
1.标出界面所要分派权限的元素.
在扫描的时刻一最先我以为很难因为HTML元素过量又有许多层级关联。一最先用的是<div>标签来示意HTML所要分派权限的元素,发明这个计划不可,比方把增加用户按钮加上DIV那末这个按钮的款式就变了还得调款式我如今做的KS体系有快要100个界面,再加上如今的界面已肯定好款式,调好CSS,加上再加上DIV的话那末得从新调界面,就这个题目想了两三天,末了我想到要不自定义一个HTML元素标签为:<box></box>为这个标签加上ID和Title为:<box id="AddID" Title=“增加按钮”></box>,用这个标签来标记所要分派权限的元素。如许的话既不必变动款式又能猎取到所要的信息。变动以后的界面背景代码为:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="Author" content="kudychen@gmail.com" /> <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> <title>用户治理——查询用户</title> <script src="../../js/DIV/jquery.js"></script> <script src="../../js/DIV/DIV.js"></script> <link href="../../css/admin.global.css" rel="stylesheet" type="text/css" /> <link href="../../css/admin.content.css" rel="stylesheet" type="text/css" /> <style type="text/css"> .btn-middle { width: 76px; } </style> </head> <body> <form id="Form" method="post" runat="server" > <%--box标记 main 最先标记--%> <box id="main" title="重要"> <div class="location">当前位置:用户治理 -> 查询用户</div> <div class="blank10"></div> <%--box标记 QueryUser 最先标记--%> <box id="QueryUser" title="查询用户"> <div class="search block" > <div class="h"> <span class="icon-sprite icon-magnifier"></span> <h3>疾速搜刮</h3> </div> <div class="tl corner"></div> <div class="tr corner"></div> <div class="bl corner"></div> <div class="br corner"></div> <div class="cnt-wp"> <div class="cnt"> <div class="search-bar"> <label class="first txt-green">用户名:</label> <input value="" type="text" name="username" id="username" class="input-small" /> <asp:LinkButton ID="lbtQuery" class="btn-lit" runat="server" OnClick="lbtQuery_Click" Width="58px"><span >查询</span></asp:LinkButton> <%--box标记 AddUser 最先标记--%> <box id="AddUser" title="增加用户"> <a class="btn-lit btn-middle" href="AdmAddUser.aspx"> <span>增加用户</span> </a> </box> <%--box标记 AddUser完毕标记--%> </div> </div> </div> </div> </box> <%--box标记 QueryUser完毕标记--%> <%--box标记 UserList最先标记--%> <box id="UserList" title="用户列表"> <span class="block"> <div class="tl corner"></div> <div class="tr corner"></div> <div class="bl corner"></div> <div class="br corner"></div> <div class="cnt-wp"> <div class="cnt"> <div class="h"> <span class="icon-sprite icon-list"></span> <h3>用户列表</h3> </div> <div class="blank10"></div> <asp:Repeater ID="rpUserInfo" runat="server" onitemcommand="rpUserInfo_ItemCommand"> <HeaderTemplate> <table class="data-table history" id="mainTable" border="0" cellspacing="0" cellpadding="0"> <tr> <th scope="col">用户称号</th> <th scope="col">角色</th> <th scope="col">操纵纪录</th> <th scope="col">编辑</th> </tr> </HeaderTemplate> <ItemTemplate> <tr> <td class="txt160 c"><%#Eval("UserName")%></td> <td class="txt c"><%#Eval("RoleName")%></td> <td class="txt80 c"><a href="AdmOperatorRecord.aspx?UserId=<%#Eval("UserNo") %>" title="操纵纪录">操纵纪录</a></td> <td class="icon"> <%--box标记 EditUserInfo最先标记--%> <box id="EditUserInfo" title="编辑用户"> <a class="opt" title="编辑" href="AdmUpdateUser.aspx?UserId=<%#Eval("UserNo") %>"> <span class="icon-sprite icon-edit"> </span> </a> </box> <%--box标记 EditUserInfo完毕标记--%> </td> </tr> </ItemTemplate> <FooterTemplate> </table> </FooterTemplate> </asp:Repeater> </div> </div> </span> <span id="spanFirst">第一页</span> <span id="spanPre">上一页</span> <span id="spanNext">下一页</span> <span id="spanLast">末了一页</span> 第<span id="spanPageNum"></span>页/共<span id="spanTotalPage"></span>页 </box> <%--box标记 UserList 完毕标记--%> </box> <%--box标记 main 完毕标记--%> </form> </body> </html>
2.扫描界面猎取所要分派权限的元素信息。
因为界面上有了<box>这个元夙来示意权限的元素,如许扫描起来就好一些了不过照样遇到了不少的题目,终究照样处理了,最难的是扫描出两个<box>之间的父子关联。下面是JS代码:
$(document).ready(function () { var rootboxs = document.getElementById("main"); var child = rootboxs.childNodes; findchildbox(child) }); //征采子节点 function findchildbox(parentNode) { for (var i = 0; i < parentNode.length; i++) { /// if (parentNode[i].nodeName == "BOX") { var childboxId = parentNode[i].id; var childboxTitle = encodeURI(parentNode[i].title); var parentbox = findparentbox(parentNode[i].parentNode); var parentboxId = parentbox.id; if (window.XMLHttpRequest) { //IE7 above,firefox,chrome^^ xmlhttp = new XMLHttpRequest(); //为了兼容部份Mozillar浏览器,当来自服务器相应开首不是xml,致使的没法相应题目 if (xmlhttp.overrideMimeType) { xmlhttp.overrideMimeType('text/xml'); } } else if (window.ActiveXObject) { //IE5\IE6 xmlhttp = new activeXObject("Microsoft.XMLHTTP"); } if (xmlhttp == null || xmlhttp == undefined) { alert("con't create XMLHttpRequest Object"); } //注册回调函数 xmlhttp.onreadystatechange = callback; //发送信息 xmlhttp.open('GET', '../../Manager/RoleManager/AddBox.ashx?childboxId=' + childboxId + '&childboxTitle=' + childboxTitle + '&parentboxId=' + parentboxId, true); xmlhttp.send(null); function callback() { //推断交互是不是完成,是不是准确返回 if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { } } } findchildbox(parentNode[i].childNodes) } } //查询父节点 function findparentbox(child) { if (child.nodeName == "BOX") { return child; } else { return findparentbox(child.parentNode) } }
3.存入数据库中。
应用AJAX存入到数据库中,一最先就遇到了题目,因为扫描界面所须要的时候太短在还没有把第一条数据插进去到数据库的时刻第二条数据就来了如许致使了第一条数据的部份信息就会被第二条纪录替换了致使存入数据库的数据涌现了题目。一最先我是打算在JS那边加上个耽误,效果表名不可。然后我就在一班顺序内里到场一个相似锁的一个东西,算作耽误吧如许存入的数据就不会错误了下面是代码:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using BLL.Manager.RoleUserManagerBLL; using System.Data; using System.Text; using Model; using BLL; namespace ExamSystemV3.Manager.RoleManager { /// <summary> /// AddBox 的择要申明 /// </summary> public class AddBox : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; System.Threading.Thread.Sleep(1000); DIVEntity EDiv = new DIVEntity(); AdmDIVManager admDIVManager = new AdmDIVManager(); PublicBLL publicBll = new PublicBLL(); string strChildBoxId = ""; string strChildBoxTitle = ""; strChildBoxId = context.Request.QueryString["childboxId"].ToString().Trim(); strChildBoxTitle = context.Server.UrlDecode(context.Request.QueryString["childboxTitle"].ToString().Trim()); string strParentBoxId=context.Request.QueryString["parentboxId"].ToString ().Trim();; string strState = "是"; string strDateTime = publicBll.GetDate(); string strIP = publicBll.GetWebClientIp(); string strOperator ="xvshu";//context.Session["UserNo"].ToString().Trim(); ; EDiv.Id = strChildBoxId; EDiv.MainRelation = strParentBoxId; EDiv.DIVName = strChildBoxTitle; EDiv.DIVDescribe = strChildBoxTitle; EDiv.Operator = strOperator; EDiv.OperatorIP = strIP; EDiv.State = strState; EDiv.DateTime = strDateTime; admDIVManager.AddDIV(EDiv); } public bool IsReusable { get { return false; } } } }
应用TreeView控件显示出来如下图:
更多ASP.NET对HTML页面元素举行权限掌握(二)相干文章请关注ki4网!