目次
快速搜索
用户列表
ホームページ バックエンド開発 C#.Net チュートリアル ASP.NET は HTML ページ要素のアクセス許可を制御します (2)

ASP.NET は HTML ページ要素のアクセス許可を制御します (2)

Feb 03, 2017 pm 03:05 PM

これは、この権限制御の最初のステップです。スキャン インターフェイスは、権限を割り当てる要素の情報を取得し、データベースに保存します。

このステップは 3 つの小さなステップに分かれています:

(1) 権限を割り当てるインターフェイス上の要素をマークします

(2) 権限を割り当てる要素の情報を取得します。割り当てられました。 (ID、タイトル、上下関係)

(3).

1. 権限を割り当てるインターフェイスの要素にマークを付けます。

スキャンするとき、HTML 要素が多すぎて階層関係が多すぎるため、最初は難しく感じました。最初は、アクセス許可を割り当てる HTML 要素を表すために

タグを使用していましたが、たとえば、ユーザーの追加ボタンに DIV を追加すると、この解決策は機能しないことがわかりました。ボタンのスタイルが変更されるため、現在作業している KS システムのスタイルを調整する必要があります。さらに、現在のインターフェイスのスタイルが決定され、CSS も調整されています。 DIV を追加すると、インターフェイスを再調整する必要があります。この問題について 2 ~ 3 日考えましたが、最終的に HTML 要素のタグは次のとおりです。このタグに ID とタイトルを追加します: 。このタグを使用して、権限を割り当てる要素をマークします。このようにして、スタイルを変更せずに必要な情報を取得できます。変更後のインターフェースの背景コードは次のとおりです:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

<!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. インターフェースをスキャンして、権限を割り当てる要素の情報を取得します。

インターフェースには許可要素を表す 要素があるため、スキャンするのは簡単ですが、それでも多くの問題が発生しましたが、最も困難だったのは 2 つをスキャンすることでした。 <ボックス間の親子関係>。以下は JS コードです:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

$(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(&#39;text/xml&#39;);

}

}

else if (window.ActiveXObject) {

//IE5\IE6

xmlhttp = new activeXObject("Microsoft.XMLHTTP");

}

if (xmlhttp == null || xmlhttp == undefined) {

alert("con&#39;t create XMLHttpRequest Object");

}

//注册回调函数

xmlhttp.onreadystatechange = callback;

//发送信息

 

xmlhttp.open(&#39;GET&#39;, &#39;../../Manager/RoleManager/AddBox.ashx?childboxId=&#39; + childboxId + &#39;&childboxTitle=&#39; + childboxTitle + &#39;&parentboxId=&#39; + 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 を使用してデータベースに保存すると、最初のデータがデータベースに挿入される前に、インターフェイスのスキャンに必要な時間が短すぎるため、最初に問題が発生しました。 2 番目のデータの情報の一部が 2 番目のレコードに置き換えられ、データベースに保存されているデータに問題が発生します。最初はJSで遅延を追加する予定でしたが、テーブル名が機能しませんでした。次に、プログラムのクラスにロックのようなものを追加し、保存されたデータが間違っていないように遅延としてカウントしました。 コードは次のとおりです。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

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 ページ要素のアクセス許可を制御します (2)

HTML ページ要素の ASP.NET アクセス許可制御 (2) 関連記事の詳細については、PHP 中国語 Web サイトに注目してください。


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C文字列におけるcharの役割は何ですか C文字列におけるcharの役割は何ですか Apr 03, 2025 pm 03:15 PM

Cでは、文字列でCharタイプが使用されます。1。単一の文字を保存します。 2。配列を使用して文字列を表し、ヌルターミネーターで終了します。 3。文字列操作関数を介して動作します。 4.キーボードから文字列を読み取りまたは出力します。

C言語でさまざまなシンボルを使用する方法 C言語でさまざまなシンボルを使用する方法 Apr 03, 2025 pm 04:48 PM

c言語のシンボルの使用方法は、算術、割り当て、条件、ロジック、ビット演算子などをカバーします。算術演算子は基本的な数学的操作に使用されます。割り当てと追加、下位、乗算、除算の割り当てには、条件操作に使用されます。ポインター、ファイル終了マーカー、および非数値値。

C言語で特殊文字を処理する方法 C言語で特殊文字を処理する方法 Apr 03, 2025 pm 03:18 PM

C言語では、以下などのエスケープシーケンスを通じて特殊文字が処理されます。\ nはラインブレークを表します。 \ tはタブ文字を意味します。 ESACEシーケンスまたは文字定数を使用して、Char C = '\ n'などの特殊文字を表します。バックスラッシュは2回逃げる必要があることに注意してください。さまざまなプラットフォームとコンパイラが異なるエスケープシーケンスを持っている場合があります。ドキュメントを参照してください。

マルチスレッドと非同期C#の違い マルチスレッドと非同期C#の違い Apr 03, 2025 pm 02:57 PM

マルチスレッドと非同期の違いは、マルチスレッドが複数のスレッドを同時に実行し、現在のスレッドをブロックせずに非同期に操作を実行することです。マルチスレッドは計算集約型タスクに使用されますが、非同期はユーザーインタラクションに使用されます。マルチスレッドの利点は、コンピューティングのパフォーマンスを改善することですが、非同期の利点はUIスレッドをブロックしないことです。マルチスレッドまたは非同期を選択することは、タスクの性質に依存します。計算集約型タスクマルチスレッド、外部リソースと相互作用し、UIの応答性を非同期に使用する必要があるタスクを使用します。

C言語のcharとwchar_tの違い C言語のcharとwchar_tの違い Apr 03, 2025 pm 03:09 PM

C言語では、charとwchar_tの主な違いは文字エンコードです。CharはASCIIを使用するか、ASCIIを拡張し、WCHAR_TはUnicodeを使用します。 Charは1〜2バイトを占め、WCHAR_Tは2〜4バイトを占有します。 charは英語のテキストに適しており、wchar_tは多言語テキストに適しています。 CHARは広くサポートされており、WCHAR_TはコンパイラとオペレーティングシステムがUnicodeをサポートするかどうかに依存します。 CHARの文字範囲は限られており、WCHAR_Tの文字範囲が大きく、特別な機能が算術演算に使用されます。

C言語でCharを変換する方法 C言語でCharを変換する方法 Apr 03, 2025 pm 03:21 PM

C言語では、charタイプの変換は、キャスト:キャスト文字を使用することにより、別のタイプに直接変換できます。自動タイプ変換:あるタイプのデータが別のタイプの値に対応できる場合、コンパイラは自動的に変換します。

Charとunsigned Charの違いは何ですか Charとunsigned Charの違いは何ですか Apr 03, 2025 pm 03:36 PM

CharおよびUnsigned Charは、文字データを保存する2つのデータ型です。主な違いは、負と正の数に対処する方法です:値範囲:char署名(-128〜127)、および符号なしのchar unsigned(0〜255)。負の数処理:charは負の数を保存でき、符号なしのcharはできません。ビットモード:char最高ビットは、シンボル、符号なしのchar unsignedビットを表します。算術操作:charおよびunsigned charが署名されており、署名されていないタイプがあり、それらの算術操作は異なります。互換性:charおよびunsigned char

C言語でchar配列の使用方法 C言語でchar配列の使用方法 Apr 03, 2025 pm 03:24 PM

Char Arrayは文字シーケンスをC言語で保存し、char array_name [size]として宣言されます。アクセス要素はサブスクリプト演算子に渡され、要素は文字列のエンドポイントを表すnullターミネーター「\ 0」で終了します。 C言語は、strlen()、strcpy()、strcat()、strcmp()など、さまざまな文字列操作関数を提供します。

See all articles