This is the first step in this permission control. The scanning interface obtains the information about the elements to be assigned permissions and stores it in the database.
This step is divided into three small steps:
(1). Mark the elements on the interface to which permissions are to be assigned
(2). Scan the interface to obtain the element information for which permissions are to be assigned . (ID, title, hierarchical relationship)
(3). Store in the database.
1. Mark the elements on the interface to which permissions are to be assigned.
When scanning, I found it difficult at first because there were too many HTML elements and many hierarchical relationships. At the beginning, I used the
<!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 id="快速搜索">快速搜索</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 id="用户列表">用户列表</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. Scan the interface to obtain the element information to which permissions are to be assigned.
Since there is a
$(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. Store in the database.
Using AJAX to save into the database, we encountered problems at the beginning, because the time required to scan the interface was too short, and the second piece of data came before the first piece of data was inserted into the database. This causes part of the information in the first piece of data to be replaced by the second record, causing problems with the data stored in the database. At first, I planned to add a delay in JS, but the table name didn't work. Then I added something similar to a lock into a class of programs, and counted it as a delay so that the stored data would not be wrong. Here is the code:
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; } } } }
Use the TreeView control to display it as shown below:
For more ASP.NET permission control on HTML page elements (2), please pay attention to the PHP Chinese website for related articles!

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

C# and .NET adapt to the needs of emerging technologies through continuous updates and optimizations. 1) C# 9.0 and .NET5 introduce record type and performance optimization. 2) .NETCore enhances cloud native and containerized support. 3) ASP.NETCore integrates with modern web technologies. 4) ML.NET supports machine learning and artificial intelligence. 5) Asynchronous programming and best practices improve performance.

C#.NETissuitableforenterprise-levelapplicationswithintheMicrosoftecosystemduetoitsstrongtyping,richlibraries,androbustperformance.However,itmaynotbeidealforcross-platformdevelopmentorwhenrawspeediscritical,wherelanguageslikeRustorGomightbepreferable.

The programming process of C# in .NET includes the following steps: 1) writing C# code, 2) compiling into an intermediate language (IL), and 3) executing by the .NET runtime (CLR). The advantages of C# in .NET are its modern syntax, powerful type system and tight integration with the .NET framework, suitable for various development scenarios from desktop applications to web services.

C# is a modern, object-oriented programming language developed by Microsoft and as part of the .NET framework. 1.C# supports object-oriented programming (OOP), including encapsulation, inheritance and polymorphism. 2. Asynchronous programming in C# is implemented through async and await keywords to improve application responsiveness. 3. Use LINQ to process data collections concisely. 4. Common errors include null reference exceptions and index out-of-range exceptions. Debugging skills include using a debugger and exception handling. 5. Performance optimization includes using StringBuilder and avoiding unnecessary packing and unboxing.

Testing strategies for C#.NET applications include unit testing, integration testing, and end-to-end testing. 1. Unit testing ensures that the minimum unit of the code works independently, using the MSTest, NUnit or xUnit framework. 2. Integrated tests verify the functions of multiple units combined, commonly used simulated data and external services. 3. End-to-end testing simulates the user's complete operation process, and Selenium is usually used for automated testing.

Interview with C# senior developer requires mastering core knowledge such as asynchronous programming, LINQ, and internal working principles of .NET frameworks. 1. Asynchronous programming simplifies operations through async and await to improve application responsiveness. 2.LINQ operates data in SQL style and pay attention to performance. 3. The CLR of the NET framework manages memory, and garbage collection needs to be used with caution.

C#.NET interview questions and answers include basic knowledge, core concepts, and advanced usage. 1) Basic knowledge: C# is an object-oriented language developed by Microsoft and is mainly used in the .NET framework. 2) Core concepts: Delegation and events allow dynamic binding methods, and LINQ provides powerful query functions. 3) Advanced usage: Asynchronous programming improves responsiveness, and expression trees are used for dynamic code construction.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Dreamweaver CS6
Visual web development tools

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

SublimeText3 Linux new version
SublimeText3 Linux latest version

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

WebStorm Mac version
Useful JavaScript development tools