집 >백엔드 개발 >C#.Net 튜토리얼 >ASP.NET은 HTML 페이지 요소에 대한 권한을 제어합니다(2).
이것은 권한 제어의 첫 번째 단계입니다. 스캐닝 인터페이스는 권한을 할당할 요소의 정보를 획득하여 데이터베이스에 저장합니다.
이 단계는 세 가지 작은 단계로 구분됩니다:
(1) 인터페이스에서 권한을 할당할 요소를 표시합니다
(2). 권한을 할당할 요소 정보를 얻기 위한 인터페이스입니다. (ID, 직위, 계층관계)
(3) 데이터베이스에 저장합니다.
1. 권한을 할당할 인터페이스 요소를 표시합니다.
스캔할 때 HTML 요소가 너무 많고 계층 관계도 많아서 처음에는 어려웠습니다. 처음에는 권한이 할당된 HTML 요소를 나타내기 위해
<!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. 인터페이스를 스캔하여 권한이 할당될 요소 정보를 얻습니다.
인터페이스에 권한 요소를 나타내는
$(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 컨트롤을 사용하여 다음과 같이 표시합니다. 아래 표시:
HTML 페이지 요소에 대한 ASP.NET 권한 제어에 대한 자세한 내용은 (2) 관련 기사는 PHP 중국어 웹사이트를 참고하세요!