8.20起

2015.8.20-2015.8.24javascript

JQuery
1、語法的基本結構:
第一步:導入JQuery腳本包css

從VS的新建web空網站裏的"解決方案資源管理器"-"Scripts文件夾"中找到"jquery-1.7.1.min.js"在界面中打開,右鍵標籤欄選擇"打開所在的文件夾",找到"jquery-1.7.1.min.js"先右鍵複製粘貼到桌面上,而後再從桌面右鍵複製粘貼到新建空網站中
第二步:寫JQuery的ready事件
$(document).ready(function(){
 //在這裏面寫代碼
});html

注意:
1.JQuery的觸發時機---瀏覽器把頁面的HTML加載完畢時觸發
2.非侵入性的編碼方式
3.鏈式結構的編碼方式
4.集合式操做---操做選擇器選擇出來的一組對象
2、具體語法
(一)找到元素
選擇器的種類:一樣式表(CSS3.0)
第一類:基本選擇器
1.最最基本的:標籤,ID選擇器,class選擇器
2.組合選擇器:空格(後代),逗號(並列),標籤名.class(篩選),> (子級選擇器)
第二類:過濾選擇器
1.基本過濾(按照HTML標記的書寫順序來過濾)
:first---選取第一個
:last---選取最後一個
:eq(索引號)---選取任意一個
:lt(索引號)---選取大於某個索引號的
:gt(索引號)---選取小於某個索引號的
:odd---選取奇數個
:even---選取偶數個
:not(選擇器)---排除某幾個java

2.屬性過濾
[屬性名]---選擇擁有某個屬性的元素
[屬性名=值]---選取屬性名是某個值的
[屬性名!=值]---選取屬性名不是某個值的
[屬性名*=值]---選取屬性值中包含某個值的
[屬性名^=值]---選取屬性名是以某個值開頭的
[屬性名$=值]---選取屬性值以某個值結尾的jquery

3.內容過濾
:has(選擇器)---開始與結束標記之間是否包含某類子元素,若是包含就選擇出來。
:contains(字符串)---開始與結束標記之間是否包含某段文字,若是包含就選擇出來。web

<title></title>
    <script src="jquery-1.7.1.min.js"></script>
    <script language="javascript">
        $(document).ready(function(){
            alert("hello world");
        });//ready()事件,瀏覽器把頁面的HTML加載完畢時觸發
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    asdfghjkl
    </div>
    </form>
</body>
---顯示文本並彈出hello world對話框
<title></title>
    <script src="jquery-1.7.1.min.js"></script>
    <script language="javascript">
        alert("JS");
        $(document).ready(function(){
            alert("hello world");
        });//ready()事件,瀏覽器把頁面的HTML加載完畢時觸發
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    asdfghjkl
    </div>
    </form>
</body>
---先彈出JS對話框,再顯示文本和彈出hello world對話框
<title></title>
    <script src="jquery-1.7.1.min.js"></script>
    <script language="javascript">
        //ready事件的觸發時機:整個HTML文本在瀏覽器中加載完畢時觸發
        $(document).ready(function () {
            $("#dd").click(function () {
                alert("這是非侵入的JS");
            });
        });//ready()事件,瀏覽器把頁面的HTML加載完畢時觸發
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div id="dd">
    asdfghjkl
    </div>
    </form>
</body>
---顯示文本,單擊文本彈出"這是非侵入的JS"對話框
<title></title>
    <script src="jquery-1.7.1.min.js"></script>
    <script language="javascript">
        //ready事件的觸發時機:整個HTML文本在瀏覽器中加載完畢時觸發
        $(document).ready(function() {
            $("#dd").click(function () {
                alert("這是非侵入的JS");
            }).mouseover(function () {
                $(this).css("background-color", "blue");
            }).mouseout(function () {
                $(this).css("background-color", "green")
            })
        });//ready()事件,瀏覽器把頁面的HTML加載完畢時觸發
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div id="dd">
    asdfghjkl
    </div>
    </form>
</body>ajax

---鼠標移上文本時背景色變爲藍色,鼠標離開文本時背景色變爲綠色
<title></title>
    <script src="jquery-1.7.1.min.js"></script>
    <script language="javascript">
        //ready事件的觸發時機:整個HTML文本在瀏覽器中加載完畢時觸發
        $(document).ready(function() {
            $("#dd").click(function () {
                alert("這是非侵入的JS");
            }).mouseover(function () {
                $(this).css("background-color", "blue").css("font-size",25px);
            }).mouseout(function () {
                $(this).css("background-color", "green")
            })
        });//ready()事件,瀏覽器把頁面的HTML加載完畢時觸發
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div id="dd">
    asdfghjkl
    </div>
    </form>
</body>sql

---鼠標移上文本時字體變大且背景色變爲藍色,鼠標離開文本時背景色變爲綠色數據庫

  <title></title>
    <script src="jquery-1.7.1.min.js"></script>
    <script language="javascript">
        //ready事件的觸發時機:整個HTML文本在瀏覽器中加載完畢時觸發
        $(document).ready(function() {
            $("div").click(function () {
                alert("這是非侵入的JS");
            }).mouseover(function () {
                $(this).css("background-color", "blue").css("font-size","25px");
            }).mouseout(function () {
                $(this).css("background-color", "green")
            })
        });//ready()事件,瀏覽器把頁面的HTML加載完畢時觸發
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div id="dd">
    asdfghjkl
    </div>
    <div id="Div1">
    asdfghjkl
    </div>
    <div id="Div2">
    asdfghjkl
    </div>
    <div id="Div3">
    asdfghjkl
    </div>
    </form>
</body>
---div裏的每一項鼠標移到文本上時字體變大且背景色變爲藍色,鼠標離開文本時背景色變爲綠色
<title></title>
    <script src="jquery-1.7.1.min.js"></script>
    <script language="javascript">
        //ready事件的觸發時機:整個HTML文本在瀏覽器中加載完畢時觸發
        $(document).ready(function() {
            $(".tf").click(function () {
                alert("這是非侵入的JS");
            }).mouseover(function () {
                $(this).css("background-color", "blue").css("font-size","25px");
            }).mouseout(function () {
                $(this).css("background-color", "green")
            })
        });//ready()事件,瀏覽器把頁面的HTML加載完畢時觸發
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div id="dd">
    asdfghjkl
    </div>
    <div id="Div1" class="tf">
    asdfghjkl
    </div>
    <div id="Div2">
    asdfghjkl
    </div>
    <div id="Div3" class="tf">
    asdfghjkl
    </div>
    </form>
</body>
---div裏class設置爲tf的項字體變大且鼠標移到文本上時背景色變爲藍色,鼠標離開文本時背景色變爲綠色瀏覽器

<title></title>
    <script src="jquery-1.7.1.min.js"></script>
    <script language="javascript">
        //ready事件的觸發時機:整個HTML文本在瀏覽器中加載完畢時觸發
        $(document).ready(function() {
            $(".tf").click(function () {
                alert("這是非侵入的JS");
            }).mouseover(function () {
                $(this).css("background-color", "blue").css("font-size","25px");
            }).mouseout(function () {
                $(this).css("background-color", "green")
            })
        });//ready()事件,瀏覽器把頁面的HTML加載完畢時觸發
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div id="dd">
    asdfghjkl
    </div>
    <div id="Div1" class="tf">
    asdfghjkl
    </div>
    <div id="Div2">
    asdfghjkl
    </div>
    <div id="Div3" class="tf">
    asdfghjkl
    </div>
    <span class="tf">ghjklghjklghjkl</span>
    </form>
</body>

---寫入一個span,class也設爲tf,全部class設置爲tf的項鼠標移上文本是字體變大且背景色變爲藍色,鼠標離開文本時背景色變爲綠色

<title></title>
    <script src="jquery-1.7.1.min.js"></script>
    <script language="javascript">
        //ready事件的觸發時機:整個HTML文本在瀏覽器中加載完畢時觸發
        $(document).ready(function() {
            $("div.tf").click(function () {
                alert("這是非侵入的JS");
            }).mouseover(function () {
                $(this).css("background-color", "blue").css("font-size","25px");
            }).mouseout(function () {
                $(this).css("background-color", "green")
            })
        });//ready()事件,瀏覽器把頁面的HTML加載完畢時觸發
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div id="dd">
    asdfghjkl
    </div>
    <div id="Div1" class="tf">
    asdfghjkl
    </div>
    <div id="Div2">
    asdfghjkl
    </div>
    <div id="Div3" class="tf">
    asdfghjkl
    </div>
    <span class="tf">ghjklghjklghjkl</span>
    </form>
</body>

---與上一步不一樣,span字體不變大,背景色也不變

    <title></title>
    <script src="jquery-1.7.1.min.js"></script>
    <script language="javascript">
        //ready事件的觸發時機:整個HTML文本在瀏覽器中加載完畢時觸發
        $(document).ready(function() {
            $("div div").click(function () {
                alert("這是非侵入的JS");
            }).mouseover(function () {
                $(this).css("background-color", "blue").css("font-size","25px");
            }).mouseout(function () {
                $(this).css("background-color", "green")
            })
        });//ready()事件,瀏覽器把頁面的HTML加載完畢時觸發
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <div id="dd">
    asdfghjkl
        <div>這是第三層div</div>
    </div>
    <div id="Div1" class="tf">
    asdfghjkl
    </div>
    <div id="Div2">
    asdfghjkl
    </div>
    <div id="Div3" class="tf">
    asdfghjkl
    </div>
    <span class="tf">ghjklghjklghjkl
         <div>這是第三層div</div>
    </span>
    </div>
    </form>
</body>

---除span外全部div鼠標移上文本時字體變大且背景色變爲藍色,鼠標離開文本時背景色變爲綠色

  <title></title>
    <script src="jquery-1.7.1.min.js"></script>
    <script language="javascript">
        //ready事件的觸發時機:整個HTML文本在瀏覽器中加載完畢時觸發
        $(document).ready(function() {
            $("div>div").click(function () {
                alert("這是非侵入的JS");
            }).mouseover(function () {
                $(this).css("background-color", "blue").css("font-size","25px");
            }).mouseout(function () {
                $(this).css("background-color", "green")
            })
        });//ready()事件,瀏覽器把頁面的HTML加載完畢時觸發
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <div id="dd">
    asdfghjkl
        <div>這是第三層div</div>
    </div>
    <div id="Div1" class="tf">
    asdfghjkl
    </div>
    <div id="Div2">
    asdfghjkl
    </div>
    <div id="Div3" class="tf">
    asdfghjkl
    </div>
    <span class="tf">ghjklghjklghjkl
         <div>這是第三層div</div>
    </span>
    </div>
    </form>
</body>

---span以前的全部div鼠標移上文本時字體變大且背景色變爲藍色,鼠標離開文本時背景色變爲綠色

(二)DOM操做
1.操做元素自己---操做屬性,操做樣式,操做內容
 (1)操做屬性:
 a.獲取屬性值:var s = xxx.attr("屬性名");
 b.添加屬性:attr("屬性名","屬性值")
 c.移除屬性:removeAttr("屬性名")

 (2)操做樣式:
 1).操做樣式的class選擇器
 addClass("class選擇器的名")---添加樣式
 removeClass("class選擇器的名")---移除樣式
 toggleClass("class選擇器的名")---切換樣式
 2).操做內聯樣式
 css("樣式名")---得到樣式值
 css("樣式名","樣式值")---設置和替換樣式

 (3)操做內容
 1)表單元素:
 取值:var s = xxxx.val()
 賦值:xxx.val("值")
 2)非表單元素:
 取值:var s = xxx.html(); var s = xxx.text();
 賦值:xxx.html("值");xxx.text("值")

 <textarea>dsfasdfasdf</textarea>

2.操做相關元素
 找相關元素:父級元素、子級元素、兄弟元素(前一個、後一個)
 操做相關元素:添加元素、複製元素、刪除元素、替換元素

(三)事件與動畫
1、事件
1.在JavaScript語法中的事件,把on...屬性中的on去掉,就是JQuery中的事件。
onclick - click
ondblclick - dblclick

onmouseover - mouseover
onmouseout - mouseout

onfocus - focus
onblur - blur

onchange - change

onkeydown - keydown
onkeyup - keyup
onkeypress - keypress

2.特有事件:
hover(function(){},function(){}):至關於把mouseover和mouseout結合起來了
toggle(function(){},function(){},...function(){}):每點擊一下執行下一個function,如執行到末尾,會再返回第一個執行


3.JQuery中的事件,須要事件的小括號中寫function(){}
$("#Button1").click(function(){
 //事件處理代碼
});

案例:
1.光棒效果:mouseover,mouseout
2.展開面板:click

2、動畫
hide(),show()
fadeIn(),fadeOut()
slideUp(),slideDown()

slideUp([毫秒數],[回調函數])
slideUp(3000,function(){xxx();})

<title></title>
    <style type="text/css">
        #aa{
           padding:10px;
           border:3px solid orange;
        }
   </style>
    <script src="Scrpits/jquery-1.7.1.min.js"></script>
    <script language="javascript">
        $(document).ready(function(){
            $("#aa").toggle(function () {
                $(this).css("background-color", "blue");
            }, function () {
                $(this).css("background-color", "green");
            }, function () {
                $(this).css("background-color", "red");
            });
        });
    </script>
</head>
<body>
    <form id="form1" runat="server">     
    <div>
    <span id="aa">注意這裏面的顏色喔</span>
    </div>
    </form>
</body>

---瀏覽器頁面中點擊文本,背景色依次變化

 <title></title>
    <script src="Scrpits/jquery-1.7.1.min.js"></script>
    <script language="javascript">
        $(document).ready(function(){
            $("#ff").click(function () {
                hideDIV();
            });
        });   
        function showDIV(div) {
            $("#ff").slideDown(3000,"hideDIV()");
    }
        function hideDIV(div) {
            $("#ff").slideUp(3000);
    }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div id="ff" style="border:3px solid orange;background-color:blue;width:300px;height:300px">    
    </div>
    </form>
</body>

---瀏覽器頁面中單擊圖片,圖片即逐漸收起且再也不展開

<title></title>
    <script src="Scrpits/jquery-1.7.1.min.js"></script>
    <script language="javascript">
        $(document).ready(function(){
            $("#ff").click(function () {
                hideDIV();
            });
        });   
        function showDIV(div) {
            $("#ff").slideDown(3000, function () { hideDIV();});
    }
        function hideDIV(div) {
            $("#ff").slideUp(3000, function () { showDIV();});
    }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div id="ff" style="border:3px solid orange;background-color:green;width:300px;height:300px">
    </div>
    </form>
</body>

---瀏覽器頁面中單擊圖片,圖片先逐漸收起再逐漸展開且不斷循環,時間間隔爲3秒

<title></title>
    <script src="Scrpits/jquery-1.7.1.min.js"></script>
    <script language="javascript">
        $(document).ready(function () {
            $("#ff").click(function () {
                $("#ff").animate({left:"400px",height:"400px"}, 3000);
            });
        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div id="ff" style="border:3px solid orange;background-color:red;width:300px;height:300px">
    </div>
    </form>
</body>

---瀏覽器頁面中單擊圖片,圖片只縱向拉伸

<title></title>
    <script src="Scrpits/jquery-1.7.1.min.js"></script>
    <script language="javascript">
        $(document).ready(function () {
            $("#ff").click(function () {
                $("#ff").animate({width:"400px",height:"400px"}, 3000);
            });
        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div id="ff" style="border:3px solid orange;background-color:red;width:300px;height:300px">
    </div>
    </form>
</body>

---瀏覽器頁面中單擊圖片,圖片寬和高同時等比例拉伸

<title></title>
    <script src="Scrpits/jquery-1.7.1.min.js"></script>
    <script language="javascript">
        $(document).ready(function () {
            $("#ff").click(function () {
                $("#ff").animate({ width: "400px" }, 3000).animate({height:"400px"},3000);
            });
        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div id="ff" style="border:3px solid orange;background-color:pink;width:300px;height:300px">
    </div>
    </form>
</body>

---瀏覽器頁面中單擊圖片,圖片寬和高前後等比例拉伸

<title></title>
    <script src="Scrpits/jquery-1.7.1.min.js"></script>
    <script language="javascript">
        $(document).ready(function () {
            $("#ff").click(function () {
                $("#ff").animate({left:"180px"},3000).animate({top:"180px"},3000).animate({ width: "400px" }, 3000).animate({height:"400px"},3000);
            });
        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div id="ff" style="border:3px solid orange;background-color:purple;position:absolute;width:300px;height:300px">
    </div>
    </form>
</body>

---瀏覽器頁面中單擊圖片,圖片等比例像素移動後,寬和高前後等比例拉伸

{後面四個圖片拉伸效果,若是animate裏面width、height數值比div裏面width、height數值小,則呈現圖片收縮效果}

【DOM操做的一點補充】

操做相關元素:
裏:children(),find("選擇器")
外:parent(),parents("選擇器")
下:next(),nextAll(選擇器)
上:prev(),prevAll("選擇器")

附加:集合操做
first(),last(),eq(n)

元素的添加、複製、替換、移除
添加:append(元素對象),prepend(元素對象),after(元素對象),before(元素對象)
複製:clone()
移除:
①清空:empty()---保留外圍的元素,把子元素和內容全都清除掉
②移除:remove()---把元素全都刪除
替換:

【Ajax的一點先導】

Ajax

---全稱Asynchronous JavaScript and XML

---它不是某一種程序的簡單操做,而是多種程序操做的集合體,包括HTML和CSS、DOM、JavaScript、XML和XSLT以及XMLHttpRequest

【使用JQuery實現Ajax效果】

1、結構:
兩塊代碼:服務端代碼,客戶端代碼(發請求以前的代碼-主調代碼,發請求以後的代碼-回調代碼)。
             ---通常來講,咱們要先寫服務端,再寫客戶端。客戶端代碼,先寫主調,再寫回調。
問題:如何解決跨語言的數據交換?---XML(可擴展的標記語言)

附加:XML語言
①是什麼---文本格式數據載體
②語法注意:
1.標籤自定義通常是雙標籤,單標籤必定要以/>結尾---不像HTML標籤那樣嚴格,可自定義標籤名
2.大小寫敏感---必須注意大小寫,不然會報錯
3.只能有一個根元素

<?xml version="1.0"?>
<students>
<stu>
<code>tf001</code>
<name>蟹老闆</name>
<age>15</age>
</stu>
<stu>
<code>tf002</code>
<name>海綿寶寶</name>
<age>13</age>
</stu> 
<stu>
<code>tf003</code>
<name>派大星</name>
<age>13</age>
<works>
  <work>
    <firm>蟹老闆的店</firm>
    <status>前臺接待</status>
  </work>
  <work>
    <firm>蟹老闆的店</firm>
    <status>後廚學徒</status>
  </work>
</works>
</stu>
<stu>
  <s code="tf004" name="維尼" age="13"/>
</stu>
</students>

---雙標籤是標籤中間加內容傳數據,單標籤是標籤屬性傳數據,二者傳輸數據外在形式不一樣

(一)服務端代碼:
//第一步:獲取傳來的數據
//第二步:處理數據生成結果
//第三步:Response寫入XML字符串

(二)客戶端代碼
$.ajax({
 url:"要調用服務端的路徑",
 data:{key:value,key:value},
 type:"POST",
 dataType:"XML",
 beforeSend:function(data){
  //提交服務器以前觸發,一般用來在這個地方顯示加載動畫
 },
 success:function(data){  //data表明服務端返回來的數據xml
  //解析XML:解析服務端返回來的XML數據

  //顯示HTML:在頁面上把解析出來的XML內容顯示出來
 },
 error:function(data){
  //服務器端執行出錯
 },
 complete:function(data){
  //無論成功仍是失敗,總會走這裏
 }

});

舉例:
1、返回簡單數據
1.不須要提供請求數據
2.須要提供請求數據
2、返回複雜數據
1.不須要提供請求數據
2.須要提供請求數據
(一)返回對象
(二)返回集合
做業:使用Ajax實現數據刪除
1、.ashx文件
1.獲取要刪除的主鍵值
2.執行刪除
3.輸出XML  <?xml version='1.0'?><root>true</root>

2、.aspx文件
(一)HTML
使用Repeater顯示數據
刪除按鈕可使用超連接來作(也可以使用button/submit),class="del"
(二)JQuery
給每一個刪除按鈕加上click事件。$(".del").click(function(){});
var tr = $(this).parents("tr"); //在主調中找到當前刪聊按鈕所在的行。
主調:在每一個click事件中,調用ajax向ashx發請求刪除數據。
回調:解析返回xml文件,根返回true/false刪除指向的table行。  注意:回調函數中不能用this
 var isOK = $(data).find("root").text();
 if(isOK == true)
 {
  $(tr).remove();
 }

例1:時間顯示

ashx代碼界面:

public class Handler : IHttpHandler {
    
    public void ProcessRequest (HttpContext context) {
        //向客戶端發送服務端的時間
        string s="<?xml version='1.0'?>";
        s += "<time>"+DateTime.Now.ToString("yyyy年MM月dd日hh時mm分ss秒")+"</time>";
        context.Response.Write(s);
        context.Response.End();
    }

}

public bool IsReusable {
    get {
            return false;
          }
}

aspx源界面:

 <title></title>
    <script language="javascript">
        $(document).ready(function () {
            $("#aa").click(function () {
                $.ajax({
                    url: "Handler.ashx",
                    data: {},
                    type: "POST",
                    dataType: "XML",
                    success: function (data) {
                        //解析客戶端返回的數據
                        var s = $(data).find("time").text();
                        //顯示在客戶端界面上
                        $("#Label1").html(s);
                    }//success
                    });//ajax
            });//aa.click
        });//ready
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>   
        <asp:Label ID="Label1" runat="server" Font-Bold="True" Font-Size="18pt" ForeColor="Green"></asp:Label>
        <span id="aa">刷新時間</span>
    </div>
    </form>
</body>

---顯示當前時間,需手動刷新時間

ashx代碼界面:

public class Handler : IHttpHandler {
    
    public void ProcessRequest (HttpContext context) {
        //向客戶端發送服務端的時間
        string s="<?xml version='1.0'?>";
        s += "<time>"+DateTime.Now.ToString("yyyy年MM月dd日hh時mm分ss秒")+"</time>";
        context.Response.Write(s);
        context.Response.End();
    }

}

public bool IsReusable {
    get {
            return false;
          }
}

aspx源界面:

 <title></title>
    <script language="javascript">
        $(document).ready(function () {
            showTime();
        });//ready
        function showTime() {
            $.ajax({
                url: "Handler.ashx",
                data: {},
                type: "POST",
                dataType: "XML",
                success: function (data) {
                    //解析客戶端返回的數據
                    var s = $(data).find("time").text();
                    //顯示在客戶端界面上
                    $("#Label1").html(s);
                }//success
            });//ajax
           window.setTimeout("showTime()", 1000);
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>   
        <asp:Label ID="Label1" runat="server" Font-Bold="True" Font-Size="18pt" ForeColor="Green"></asp:Label>
    </div>
    </form>
</body>

---自動刷新時間

例2:用戶登陸註冊

ashx代碼界面:

using System;
using System.Web;
using System.Linq;
using System.Data.Linq;
public class CheckUserName : IHttpHandler {
    private MyDBDataContext _Context = new MyDBDataContext();
    public void ProcessRequest (HttpContext context) {       
        //獲取用戶名
        string uid = context.Request["u"].ToString();
        //到數據庫檢查數據
        var query=_Context.Login.Where(p=>p.UserName==uid);
        bool isOK=query.Count()==0?true:false;
        //返回XML數據
        string s = "<?xml version='1.0'?><ok>"+isOK+"</ok>";
        context.Response.Write(s);
        context.Response.End();
    }

aspx源界面:

<title></title>
    <script src="Scripts/jquery-1.7.1.min.js"></script>
        <script language="javascript">
            $(document).ready(function () {
              //給UID加blur事件
                $("#txtUID").blur(function () {
                    var s = $(this).val();//獲取用戶名
                    //向服務端發送請求並處理回調函數
                    $ajax({
                        url: "AjaxCode/CheckUserName.ashx",
                        data:{u:s},
                        type:"POST",
                        dataType: "XML",
                        success: function (data) {
                            //解析客戶端返回數據
                            var ok = $(data).find("ok").text;
                            //顯示在客戶端界面上
                            if (ok == true) {
                                $("#lbl").html("該用戶名可使用");
                            }
                            else {
                                $("#lbl").html("該用戶名已存在");
                            }
                        }//success
                });//ajax
                });//blur
            });//ready
        </script>
</head>
<body>
    <form id="form1" runat="server">
        <h1>登陸</h1>
        <div>
        用戶名:<asp:TextBox ID="txtUID" runat="server"></asp:TextBox>
            <asp:Label ID="Label1" runat="server" Font-Bold="True" ForeColor="Blue" Text="lbl"></asp:Label>
            <br />
        密碼:<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
            <br />
        確認密碼:<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
            <br />
        郵箱:
            <asp:TextBox ID="TextBox4" runat="server"></asp:TextBox>
            <br />
            <asp:Button ID="Button1" runat="server" Text="Button" />
       </div>
    </form>
</body>

---用戶登陸註冊

例3:Ajax實現數據刪除

aspx源界面:

<title></title> 
    <script src="Scripts/jquery-1.7.1.min.js"></script>
    <script language="javascript">
        $(document).ready(function(){
            $(".del").click(function () {
                //得到要刪除的主鍵
                var key = $(this).attr("aaa");
                var tr=$(this).parents(".trcar");
                //ajax請求刪除
                $.ajax({
                    url: "AjaxCode/DeleteCar.ashx"
                    data: { id: key },
                    type:"POST",
                    dataType: "XML",
                    success: funtion(data){
                      //解析xml數據
                      var ret=$(data).find("ok").text;            
                      if(ret=="true"‖ret="True"){
                    //操做html界面
                    $(tr).remove();
                }
              }//success         
            });//ajax
        //ajax回調刪除
          });//給del加click事件
        });//ready
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
   
        <asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand">
        <HeaderTemplate>
          <table width="100%" border="1">
        </HeaderTemplate>
        <ItemTemplate>
          <tr>
            <td><%#Eval("Name") %></td>
            <td><%#Eval("Price") %></td>
              <td>
                  <a href="#" class="del" aaa="<%#Eval("Code") %>">刪除</a>
              </td>
          </tr>
        </ItemTemplate>
        <FooterTemplate>
          </table>
        </FooterTemplate>
      </asp:Repeater>
    </div> 
    </form>
</body>

aspx代碼界面:

public partial class _Default : System.Web.UI.Page
{
    private MyDBDataContext _Context = new MyDBDataContext();
    protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack)
        {
            Show();
        }
    }
    private void Show()
    {
        var query = _Context.Car;
        Repeater1.DataSource = query;
        Repeater1.DataBind();

    }
}

ashx代碼界面:

public class DeleteCar : IHttpHandler {
    private MyDBDataContext_Context=new MyDBDataContext();
    public void ProcessRequest (HttpContext context) {
              string s="";
              //得到主鍵值
              string code=context.Request["id"].ToString();
             //刪除
              var query=_Context.Car.Where(p=>p.Code==code);
              if(query.Count>0)
              {
                  Car data=query.First();
                  _Context.Car.DeleteOnSubmit(data);
                  _Context.SubmitChanges();
                  s="true";
              }
              else
              {
                  s="false";
              }
             //返回XML
             context.Response.Write("<?xml.version='1.0'?><ok>"+s+"</ok>");
             context.Response.End();
    }
---Ajax實現數據刪除

2015.8.25-2015.8.26

用戶控件
1、是什麼---自定義的反覆重用的控件集合

2、使用用戶控件的好處
1.代碼重用
2.結構良好
3.分工開發
4.局部緩存

3、難點
(一)交換信息:
1.從頁面向用戶控件交換信息,代碼寫在頁面中。
①用戶控件名.FindControl("用戶控件中的控件的ID")
TextBox textBox1 = WUC1.FindControl("TextBox1") as TextBox;

②事先在用戶控件中定義public屬性,經過屬性爲裏面的控件賦值或取值。
用戶控件中的代碼:
    public string TextValue
    {
        get
        {
            return TextBox1.Text;
        }
        set
        {
            TextBox1.Text = value;
        }
    }
頁面中的代碼:
WUC1.TextValue = txt.Text;

2.從用戶控件向頁面交換信息,代碼要寫在用戶控件中。
①session
第一步:在用戶控件的按鈕中把數據放在Session中。
string x = TextBox1.Text;
Session["data"] = x;

第二步:在頁面的OnLoadComplete事件中,從Session中取出數據來,顯示在頁面上。

 protected override void OnLoadComplete(EventArgs e)
    {
        base.OnLoadComplete(e);
        if (Session["data"] != null)
        {
            Label1.Text = Session["data"].ToString();
        }
    }

---若是隻在Page_Load寫if的部分,Label和TextBox的輸入內容不能同步,輸入Label的內容上傳到TextBox會延遲,使用OnLoadComplete可以使Label和TextBox的輸入內容同步

②代理、委託 delegate---指向方法(動做)的引用
類比:類的使用---指向對象的引用 Dog d=new Dog()
類的使用步驟:
第一步:用class 關鍵字定義一個類的類型
public class Dog
{
 //成員變量定義
 //成員屬性定義
 //成員方法定義
}
第二步:使用這個新的類型定義一個變量(類的變量)引用。
Dog d;

第三步:把這個變量引用指向一個新對象。
d = new Dog();

第四步:經過調用引用,實現對對象的調用。
d.Name
d.Bark()

代理的使用步驟:
第一步: 使用 delegate 定義一個新的代理類型。
public delegate 返回類型 代理類型名(參數定義);
例如:public delegate void ShowDelegate(string s);
第二步:使用新的代理類型定義一個變量(代理變量)
ShowDelegate Show;
第三步:把代理變量指向一個新的方法
Show = new ShowDelegate(方法名);
第四步:經過調用代理來實現對方法的調用。
Show("hello");

---代理的好處在於它在定義的時候就寫好了成員變量、成員屬性、成員方法,而類必須分別定義成員變量、成員屬性、成員方法

事件---代理的一種特殊形式
1.代理所指向的方法,能夠有返回值,事件所指向的方法必須是void返回類型。
2.實例化(掛函數的代碼不同)
 代理 UserList1.Show = new UserList1.Show(函數名);
 事件 UserList1.Show += 函數名;

(二)路徑:
1.控件路徑:圖片、超連接
使用服務端的控件,標準控件或者HTML標記加上"runat=server",這樣服務端就會自動轉換成正確的路徑出來。

2.樣式表中值的路徑:background-image:url(路徑)
不要使用內聯樣式,使用外部樣式表來控制圖片路徑。

3.外部資源路徑:用戶控件中引入外部腳本文件
使用 string path = ResolveClientUrl("服務器端路徑");  //返回的是客戶端對應的路徑
HTML代碼:
<script src="<%= ShowScriptPath() %>" ></script>---注意:尖括號內是%=而不是%#
C#代碼:
    public string ShowScriptPath()
    {
        string path = "Scripts/JavaScript.js";
        path = this.ResolveClientUrl(path);
        return path;
    }

4.C#代碼的調用路徑:使用應用程序路徑的根來解決
Response.Redirect("頁面");
Response.Redirect("~/Default.aspx");---注意:小括號內必定是絕對路徑~/,而不是相對路徑../

例:審批流過程

法一:(與法二使用的控件略有不一樣)

【登陸界面】

aspx源界面:

<title></title>
</head>
<body>
    <form id="form1" runat="server">
        用戶名:<asp:TextBox ID="txtUID" runat="server"></asp:TextBox>
        <br />
        密碼:<asp:TextBox ID="txtPWD" runat="server"></asp:TextBox>
        <br />
        <asp:Button ID="btnLogin" runat="server" OnClick="btnLogin_Click" Text="登陸" />
    </form>
</body>

aspx代碼界面:

public partial class _Default : System.Web.UI.Page
{
    private MyDBDataContext_Context = new MyDBDataContext();
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void btnLogin_Click(object sender, EventArgs e)
    {
        var query=_Context.Emp.Where(p=>p.UserName==txtUID.Text&&p.password==txtPWD.Text);
        if(query.Count()>0)
        {
            Session["user"]=txtUID.Text;
            Response.Redirect("Main.aspx");
        }
    }
}

【主界面】

aspx源界面:

<title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
   
        <asp:RadioButtonList ID="rblUsers" runat="server" RepeatDirection="Horizontal">
        </asp:RadioButtonList>
        <br />
        <asp:Button ID="Button1" runat="server" Text="添加節點" OnClick="Button1_Click" />
        <br />
        <asp:Repeater ID="Repeater1" runat="server">
            <ItemTemplate>
                <div>
                <%#Eval("EmpID") %>
                <asp:ImageButton ID="ImageButton1" CommandArgument="<%#ShowKey() %>" OnClick="ImageButton1_Click" runat="server" ImageUrl="~/images/delete.png"/>
                </div>
            </ItemTemplate>
            <SeparatorTemplate>
                <asp:Image ID="Image1" ImageUrl="~/images/arrow.png" runat="server" />
            </SeparatorTemplate>
        </asp:Repeater>
   
    </div>
        <asp:Button ID="Button2" runat="server" Text="提交" />
    </form>
</body>

aspx代碼界面:

public partial class Main : System.Web.UI.Page
{
    private MyDBDataConrtext_Context=new MyDBDataContext();
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            if(Session["list"]==null)
            {
                Response.Redirect("Default.aspx");
            }
            //加載人員列表數據
            LoadEmp();
        }
    }
    public string ShowKey()
    {
        return Eval("Code").ToString();
    }
    private void LoadEmp()
    {
        var query = _Context.Emp;
        rblUsers.DataSource=query;
        rblUsers.DataTextField="Name";
        rblUsers.DataValueField="UserName";
        rblUsers.DataBind();
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        //從集合中把session取出來
        if(Session["list"]==null)
        {
            List<FlowPath>temp=new List<FlowPath>();
            Session["list"]=temp;
        }
        List<FlowPath>list=Session["list"]as List<FlowPath>;
        //找最大索引號
        int maxOrders=0;
        if(list.Count>0)
        {
        list=list.OrderByDescending(p=>p.Orders).ToString();
        int maxOrder=list.First().Orders.Value;
        }
        maxOrder++;
        //向session中添加對象
        FlowPath data=new FlowPath();
        data.Code=DateTime.Now.ToString("yyyyMMddhhmmss")+maxOrder.ToString()+Session["user"].ToString();
        data.EmpId=rblUsers.SelectedValue;
        data.Orders=maxOrder;
        list.Add(data);
        list=list.OrderBy(p=>p.Orders).ToList();
        Session["list"]=list;
        //頁面顯示
        Repeater1.DataSource=list;
        Repeater1.DataBind();
    }
    protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
   {
        //取出要刪除項的主鍵值
        ImageButton btn=sender as ImageButton;
        string key=btn.CommandArgument.ToString();
        //從session中刪除對應項
        if(Session["list"]=null)
        {
            List<FlowPath>list=Session["list"]as List<FlowPath>;
            var query=list.Where(p=>p.Code==key);
            if(query.Count()>0)
            {
                FlowPath data=query.First();
                list.Remove(data);
                Session["list"]=list;
                Repeater1.DataSource=list;
                Repeater1.DataBind();
            }
          
        }
   }
}

【FlowPath代碼界面】

public partial class FlowPath
{
    private MyDBDataContext_Context=new MyDBDataContext();
 public string Name
 {
        get
        {
            string empID=this.EmpId;
            var query=_Context.Emp.Where(p=>p.UserName==empID);
            if(query.Count()>0)
            {
                return query.First().Name;
            }
            return "";
        }
 }
}

法二:①使用session

【登陸界面】

aspx源界面:

 <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
   
        用戶名:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <br />
        密碼:<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
        <br />
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="登陸" />
   
    </div>
    </form>
</body>

aspx代碼界面:

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Session["user"] = TextBox1.Text;
        Response.Redirect("~/Test/Main.aspx");
    }
}

【主界面】

aspx源界面:

<title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
   
        <uc1:UserList ID="UserList1" runat="server" />
        <uc2:NodesShow ID="NodesShow1" runat="server" />
    </div>
       
    </form>
</body>

aspx代碼界面:

public partial class Main : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        UserList1.Show=new Test_UserList1.ShowDelegate(NodesShow1.ShowSession);
    }
}

【主界面NodesShow界面】

aspx源界面:

<asp:Panel ID="Panel1" runat="server">
    <asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand">
        <HeaderTemplate>
            <table width="300" border="0" align="center">
        </HeaderTemplate>
        <ItemTemplate>
            <tr>
                <td width="220"><%#Eval("Name") %></td>
                <td width="44">
                    <asp:ImageButton ID="ImageButton1" OnClick="ImageButton1_Click" runat="server" CommandArgument="<%#SetKey() %>" ImageUrl="~/images/delete.png"/></td>
            </tr>
        </ItemTemplate>
        <SeparatorTemplate>
            <tr>
                <td>
                <asp:Image ID="Image1" runat="server" ImageUrl="~/images/arrow.png" /></td>
                <td></td>
            </tr>
        </SeparatorTemplate>
        <FooterTemplate>
            </table>
        </FooterTemplate>
    </asp:Repeater>
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<asp:Button ID="btnSubmit" runat="server" Text="提交" OnClick="btnSubmit_Click" />
</asp:Panel>

aspx代碼界面:

public partial class NodesShow : System.Web.UI.UserControl
{
    private string SetKey()
    {
        return Eval("Code").ToString();
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ShowSession();
        }
    }
    private void ShowSession()
    {
        if (Session["list"] != null)
        {
            List<FlowPath>list=Session["list"]as List<FlowPath>;
            Repeater1.DataSource = list;
            Repeater1.DataBind();
        }
    }

    protected void btnSubmit_Click(object sender, EventArgs e)
    {

    }

    protected void ImageButton1_Click(object sender, EventArgs e)
    {
        //刪除的代碼
        //1.獲取要刪除的主鍵
        string key = (sender as ImageButton).CommandArgument.ToString();
        //2.執行刪除
        if (Session["list"] != null)
        {
            List<FlowPath> list = Session["list"] as List<FlowPath>;
            FlowPath data=list.Where(p => p.Code == key).First();
            list.Remove(data);
            Session["list"] = list;
        }
        //3.刷新
        ShowSession();
    }
}

【主界面UserList界面】

aspx源界面:

<asp:Panel ID="Panel1" runat="server" HorizontalAlign="Center">
    <asp:Repeater ID="Repeater1" runat="server">
        <ItemTemplate>
            <input type="radio" name="rbusers" value="<%#Eval("UserName") %>"><%#Eval("Name") %>
        </ItemTemplate>
    </asp:Repeater>
    <br/>
    <asp:Button ID="btnAddNode" runat="server" Text="添加節點" OnClick="btnAddNode_Click" />
</asp:Panel>

aspx代碼界面:

public partial class UserList : System.Web.UI.UserControl
{  
    //定義代理新類型
    public delegate void ShowDelegate();
    //使用代理類型定義代理變量
    public ShowDelegate Show;

    private MyDBDataContext_Context=new MyDBDataContext();
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            var query = _Context.Emp;
            Repeater1.DataSource=query;
            Repeater1.DataBind();
        }
    }
   protected void btnAddNode_Click(object sender, EventArgs e)
   {   //1、獲取以前添加的人員列表
       if(Session["list"]==null)
       {
           List<FlowPath>temp=new List<FlowPath>();
           Session["list"]=temp;
       }
       List<FlowPath>list=Session["list"]as List<FlowPath>;
   }
    //2、添加選中人員
    //1.計算人員排序號
    list=list.OrderBy(p=>p.Orders).ToList();
    int order=1;
    if(list.Count>0)
    {
        order=list.Last().Orders.Value+1;
    }
    //2.生成節點對象
    FlowPath data=new FlowPath();
    data.Code=DateTime.Now.ToString("yyyyMMddhhmmss")+order+Session["user"].ToString();
    data.EmpId=Request["rbusers"].ToString();
    data.Orders=order;
    //3.把對象添加到集合當中去
    list.Add(data);
    //4.把數據送到Session中保存
    Session["list"]=list;
    //3、從新綁定NodeShow中的Repeater
    //從新調用
    if(Show!=null)
    {
        Show();
    }
}

【FlowPath代碼界面】

public partial class FlowPath
{
 public string Name
 {
        get
        {
            MyDBDataContext Context=new MyDBDataContext();
            var query = context.Emp.Where(p => p.UserName == this.EmpId);
            if (query.Count() > 0)
            {
                return query.First().Name;
            }
            return "";
        }

 }
}

法二:②不使用session,使用事件

其餘部分不變

UserList代碼:

public partial class UserList : System.Web.UI.UserControl
{  
    //定義代理新類型
    public delegate void ShowDelegate();
    //使用代理類型定義代理變量
    public event ShowDelegate Show;---加event

    private MyDBDataContext_Context=new MyDBDataContext();
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            var query = _Context.Emp;
            Repeater1.DataSource=query;
            Repeater1.DataBind();
        }
    }
   protected void btnAddNode_Click(object sender, EventArgs e)
   {   //1、獲取以前添加的人員列表
       if(Session["list"]==null)
       {
           List<FlowPath>temp=new List<FlowPath>();
           Session["list"]=temp;
       }
       List<FlowPath>list=Session["list"]as List<FlowPath>;
   }
    //2、添加選中人員
    //1.計算人員排序號
    list=list.OrderBy(p=>p.Orders).ToList();
    int order=1;
    if(list.Count>0)
    {
        order=list.Last().Orders.Value+1;
    }
    //2.生成節點對象
    FlowPath data=new FlowPath();
    data.Code=DateTime.Now.ToString("yyyyMMddhhmmss")+order+Session["user"].ToString();
    data.EmpId=Request["rbusers"].ToString();
    data.Orders=order;
    //3.把對象添加到集合當中去
    list.Add(data);
    //4.把數據送到Session中保存
    Session["list"]=list;
    //3、從新綁定NodeShow中的Repeater
    //從新調用
    if(Show!=null)
    {
        Show();
    }
}

Main代碼:

public partial class Main : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        UserList1.Show += NodesShow1.ShowSession;
    }
}

2015.8.27

母版頁MasterPage
---從粗到細,逐步細化各級頁面的模板結構,首個母版頁(也就是頂級母版頁)編輯好後,在各級頁面中只需編輯其不一樣之處,相同之處都在各級母版頁中自動生成。

ContentPlaceHoder---位置預留標記
Content---各級母版頁(除了頂級,也就是每一個網站項目的首個母版頁)實際內容存放位置,它與上一級母版頁的ContentPlaceHoder是一一對應的,最後頁面生成的時候,會把各級頁面和母版一塊兒編譯生成一個用戶界面。

思路:把母版頁套進頁面裏來,不是拿着頁面的東西放到母版頁中去。母版頁不是獨立的,它是與用戶控件一塊兒來使頁面結構更加優化。

兩大難點:(與用戶控件思路一致)

this.Master---當前頁面的母版頁

1、交換信息
(一)從頁面操做母版頁
1.FindControl()

2.事先在母版頁中寫好屬性

(二)從母版頁操做頁面
1.session

2.代理

2、路徑
1.控件路徑:使用帶有"runat=server"的標記或控件
2.背景路徑:樣式表的背景圖片---外部樣式表
3.資源路徑:母版頁中的外部樣式表會自動轉化路徑,腳本文件不會自動轉路徑須要使用<%=方法名()%>和ResolveClientUrl()
4.C#代碼路徑 Response.Redirect("~/Admin/Default.aspx")

2015.8.31

【微軟自帶Ajax】

VS工具箱中AJAX控件:

ScriptManager---焦點管理器,只能有一個

UpdatePanel---刷新面板,能夠有多個

UpdateProgress---刷新進度

Timer---計時器

UpdatePanel控件屬性:

UpdateMode---Always(全部的同步刷新);Conditional(有條件刷新,可設置其中幾個刷新,也可交叉刷新)

ChildrenAsTriggers---觸發子元素刷新

Triggers---AsyncPostBackTrigger(異步刷新);PostBackTrigger(同步刷新)

【GridView】

GridView---表格化顯示數據,但靈活度沒有Repeater高

1、顯示數據

1.代碼綁定

2.數據源控件綁定

SqlDataSource,LinqDataSource,ObjectDataSource...

2、外觀控制

1.控制總體

(1)自動套用格式

設置自動套用格式:GridView右上角智能菜單→"自動套用格式"

取消自動套用格式:GridView右上角智能菜單→"自動套用格式"→移除格式設置

(2)手動設置樣式

GridView屬性→"外觀"/"樣式"類別屬性---調整總體外觀風格

2.控制列

法一:Column屬性

法二:GridView右上角智能菜單→"編輯列"

3.編輯行

GridView逐行建立、逐行綁定,建立完成觸發RowCreated事件,綁定完成觸發RowBound事件

e.Row.RowType.ToString()+"Create Over→"

e.Row.RowType.ToString()+"DataBind Over→"

---顯示建立完成、綁定完成標記

if(e.Row.RowType==DataControlRowType.DataRow)

---顯示建立完成、綁定完成標記(Header、Footer不顯示)

RowDataBound事件:

if(e.Row.RowType=DataControlRowType.DataRow)

{

          //取數據

          e.Row.DataItem as

          //改外觀

         e.Row.Cells[n].Text

}

2015.9.1

【LinqDataSource】

LinqDataSource右上角智能菜單→"啓用刪除"

RowDeleting(刪除前觸發)/RowDeleted(刪除後觸發)

e.Keys獲取主鍵---前提:保證DataKeyNames有值

◎GridView刪除

法一:使用超連接列(HyperLinkField)

1.設置Text,DataNavigateUrlFields,DataNavigateFormating

2.建ashx執行刪除

法二:使用GridView刪除列

若是沒有外鍵,直接執行刪除;

若是有外鍵,寫RowDeleting、RowDeleted事件

//取主鍵

(1)確認GridView中DataKeyNames是否有值

(2)e.Keys[主鍵列表]

//執行刪除

注意事務(★)

//刷新,阻止事件繼續

GridView1.DataBind();

e.Cancel=true;

◎JS確認實現

法一:在RowDataBound事件中找到刪除按鈕,給刪除按鈕加OnClientClick事件

法二:使用JQuery的非侵入性實現確認---在編輯窗口屬性設置"樣式"類別中Control樣式的CssClass,確保JQuery找到刪除按鈕

【MVC】

MVC---Model(模型)View(視圖層)Control(控制層)

三個文件夾:Controllers(Controller是窗體固定後綴,命名窗體只更改Controller以前的部分),Views,Models

客戶端請求的是控制器(Controller)的動做(Action)

視圖的做用:事先把模板作好,用來給控制器的Action調用

例:審批流

【Default登陸源界面】

<title></title>
</head>
<body>
    <form id="form1" runat="server">
        <center><h1>登陸</h1> </center>     
        <div>
            <center>
            帳號:<asp:TextBox ID="TextBox1" runat="server" OnTextChanged="TextBox1_TextChanged"></asp:TextBox>
            <br />
            密碼:<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
            <br />
            <asp:Button ID="Button1" runat="server" Text="Button" />
            </center>
    </div>
    </form>
</body>

【Default登陸代碼界面】

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Session["user"] = TextBox1.Text;
        Response.Redirect("~/Main.aspx");
    }
}

【Main源界面】

<title></title>
</head>
<body>
    <form id="form1" runat="server">
        <center><h1>流程管理及運轉</h1></center>
    <div>
        <center>
        <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/ShouWen.aspx">收文</asp:HyperLink>
        &nbsp;<asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl="~/FaWen.aspx">發文</asp:HyperLink>
        </center>
    </div>
       
    </form>
</body>

【收文源界面】

<title></title>
</head>
<body>
    <form id="form1" runat="server">
        <center><h1>收文管理</h1></center>
    <div>
    <asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand">
        <ItemTemplate>
            <div>
                <a  target="_blank" href="ViewPaper.aspx?id=<%#Eval("PaperId") %>"><%#Eval("PaperId") %></a>
                <asp:Button ID="btnAgree" CommandArgument="<%#SetKey() %>" OnClick="btnAgree_Click" runat="server" Text="經過" />
                <asp:Button ID="btnDisAgree" runat="server" Text="拒絕" />
            </div>
        </ItemTemplate>
    </asp:Repeater>
    </div>
    </form>
</body>

【收文代碼界面】

public partial class ShouWen : System.Web.UI.Page
{
    private MyDBDataContext_Context=new MyDBDataContext();
    public string SetKey()
    {
        return Eval("PaperId").ToString();
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if(Session["user"]==null)
        {
            Response.Redirect("~/Default.aspx");
        }
        if(!IsPostBack)
        {
            var query=_Context.FlowRun.Where(p=>p.State=="1"&&p.EmpId==Session["user"].ToString());
            Repeater1.DataSource=query;
            Repeater1.DataBind();
        }
    }

    protected void btnAgree_Click(object sender, EventArgs e)
    {
        //查出同流程審批人員,當前登陸審批人員狀態設爲2,下一審批人員狀態設爲1
        string paperID=(sender as Button).CommandArgument.ToString();
        List<FlowRun>list=_Context.FlowRun.Where(p=>p.PaperId==paperID).ToString();
        for(int i=0;i<list.Count;i++)
        {
            if(list[i].EmpId==Session["user"].ToString()&&list[i].State="1")
            {
                list[i].State="2";
            }
            if(i<list.Count-1)
            {
                list[i+1].State="1";
            }
        }
        _Context.SubmitChanges();
        Show();
    }
}

【發文源界面】

<title></title>
    <script src="Scripts/jquery-1.7.1.min.js"></script>
    <script language="javascript">
        $(document).ready(function () {
            $("btnNewFlow").click(function () {
                window.open("XinJianLiuCheng.aspx", "_blank", "width=300 height=400 toolbar=no");
                return false;
            })//btnClick
        })//ready
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <center><h1>發文管理</h1></center>
    <div>
   
        發文流程:<asp:DropDownList ID="ddlFlow" runat="server">
        </asp:DropDownList>
        <asp:Button ID="btnNewFlow" runat="server" Text="新建流程" />
        <br />
        選擇公文:<asp:FileUpload ID="FileUpload1" runat="server" />
        <br />
        <asp:Button ID="Button1" runat="server" Text="提交審批" OnClick="Button1_Click" />
   
    </div>
    </form>
</body>

【發文代碼界面】

public partial class FaWen : System.Web.UI.Page
{
    private MyDBDataContext_Context=new MyDBDataContext();
    protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack)
        {
            FillFlow();
        }

    }
    //加載流程列表
    private void FillFlow()
    {
        var query = _Context.Flow.Where(p => p.EmpId == Session["user"].ToString());
        ddlFlow.DataSource=query;
        ddlFlow.DataTextField="Name";
        ddlFlow.DataValueField="Code";
        ddlFlow.DataBind();
    }
   protected void Button1_Click(object sender, EventArgs e)
   {
       //公文插入
       paper data=new paper();
       string paperKey=Guid.NewGuid.ToString();
       data.Code=paperKey;
       data.Content=FileUpload1.FileBytes;
       data.EmpId=Session["user"].ToString();
       data.Date=DateTime.Now;
       _Context.paper.InsertOnSubmit(data);
       _Context.SubmitChanges();
       //加入人員到流程運轉表中
       string flowCode=ddlFlow.SelectedValue;
       var query=_Context.FlowPath.Where(p=>p.FlowId==flowCode).OrderBy(p=>p.Orders);
       int n=0;
       foreach(FlowPath item in query)
       {
           //造一個FlowRun,向FlowRun中插入記錄
           FlowRun run=new FlowRun();
           run.FlowId=item.FlowId;
           run.EmpId=item.EmpId;
           run.PaperId=paperKey;
           run.State=(n==0?"1":"0");
           _Context.FlowRun.InsertOnSubmit(run);
           n++;
       }
       _Context.SubmitChanges();
   }
}

【ViewPaper代碼界面】

public partial class ViewPaper : System.Web.UI.Page
{
    private MyDBDataContext_Context=new MyDBDataContext();
    protected void Page_Load(object sender, EventArgs e)
    {
        Response.ContentType="Application/msword";
        string paperID = Request["id"].ToString();
        var query=_Context.paper.Where(p=>p.Code==paperID);
        if(query.Count()>0)
        {
            paper data=query.First();
            byte[] content=data.Content.ToArray();
            Response.OutputStream.Write(content,0,content.Length);
            Response.End();
        }
    }
}

【新建流程源界面】

 <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <h1>新建流程</h1>
    <div>
   
        <asp:RadioButtonList ID="rblUsers" runat="server" RepeatDirection="Horizontal" RepeatLayout="Flow">
        </asp:RadioButtonList>
   
        <br />
        <asp:Button ID="btnAddNode" runat="server" Text="添加節點" OnClick="btnAddNode_Click" />
        <br />
        <asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand">
            <ItemTemplate>
                <div><%#Eval("EmpID") %><asp:Button ID="Button1" runat="server" Text="刪除" /></div>
            </ItemTemplate>
            <SeparatorTemplate>
                <div>&nbsp;&nbsp;&nbsp;&nbsp;</div>
            </SeparatorTemplate>
        </asp:Repeater>
   
    </div>
        <asp:Panel ID="Panel1" runat="server">
            流程名稱:<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
            <br />
            <asp:Button ID="btnNext" runat="server" OnClick="btnNext_Click" Text="下一步" />
        </asp:Panel>
        <asp:Panel ID="Panel2" runat="server">
            <asp:Repeater ID="Repeater2" runat="server">
                <ItemTemplate>
                    <div>
                        <%#Eval("EmpID") %>
                        <asp:Button ID="Button2" runat="server" Text="刪除" />
                    </div>
                </ItemTemplate>
                <SeparatorTemplate>
                    <div>
                        &nbsp;&nbsp;&nbsp;&nbsp;</div>
                </SeparatorTemplate>
            </asp:Repeater>
        </asp:Panel>
        <asp:Button ID="Button3" runat="server" OnClick="Button3_Click" Text="提交" />
        <asp:Literal ID="Literal1" runat="server"></asp:Literal>
    </form>
</body>

【新建流程代碼界面】

public partial class XinJianLiuCheng : System.Web.UI.Page
{
    private MyDBDataContext_Context=new MyDBDataContext();
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            FillUsers();
        }
    }
    private void FillUsers()
    {
        var query = _Context.Emp;
        rblUsers.DataSource = query;
        rblUsers.DataTextField="Name";
        rblUsers.DataValueField = "UserName";
        rblUsers.DataBind();
    }
    protected void btnNext_Click(object sender, EventArgs e)
    {
        Panel2.Visible = true;
        Panel1.Visible = !Panel2.Visible;
    }
   protected void btnAddNode_Click(object sender, EventArgs e)
   {
       if(Session["list"]==null)
       {
           List<FlowPath>temp=new List<FlowPath>();
           Session["list"]=temp;
       }
       List<FlowPath>list=Session["list"] as List<FlowPath>;
       //計算排序號
       list=list.OrderBy(p=>p.Orders).ToList();
       int order=1;
       if(list.Count>0)
       {
           order=list.Last().Orders+1;

       }
       //向list中添加一個節點
       FlowPath data=new FlowPath();
       data.Code=DateTime.Now.ToString("yyyyMMddhhmmss")+Session["user"].ToString();
       data.EmpId=rblUsers.SelectedValue;
       data.Order=order;
       list.Add(data);
       Session["list"]=list;
       //綁定顯示
       Repeater1.DataSource=list;
       Repeater1.DataBind();
   }
   protected void Button3_Click(object sender, EventArgs e)
   {
       if(Session["list"]!=null)
       {
           string key=Guid.NewGuid.ToString();
           Flow data=new Flow();
           data.Code=key;
           data.Name=txtName.Text;
           data.EmpId=Session["user"].ToString();
           _Context.Flow.InsertOnSubmit(data);          
           List<FlowPath>list=Session["list"] as List<FlowPath>;
           foreach(FlowPath item in list)
           {
               item.FlowId=key;
           }
           _Context.FlowPath.InsertAllOnSubmit(list);
           _Context.SubmitChanges();

           //清除session,確保數據不覆蓋
           Session["list"]=null;
          
           list.Clear();
           Session["list"]=list;
           //關閉當前窗口,刷新源窗口
           Literal1.Text="<script>opener.location.reload();window.close();</script>";
       }
   }
}

2015.9.6

當前時間是:@DateTime.Now.ToString("yyyy年MM月dd日hh時mm分ss秒")

當前日期是:@DateTime.Now.ToString("yyyy年MM月dd日")

當前時間是:@DateTime.Now.ToString("hh時mm分ss秒")

當前日期:@DateTime.Now.ToString("yyyy年MM月dd日")
@if(DateTime.Now.Hour<12)
{
          <text>上午</text>
}
else
{
          @:下午
}
當前時間:@DateTime.Now.ToString("hh時mm分ss秒")

2015.9.9

【微軟自帶數據庫登陸與驗證】

1.配置數據庫

aspnet_regsql

2.編寫配置文件

<configuration>
<connectionStrings>
    <add name="DefaultConnection" connectionString="server=.;database=mydb;uid=sa;pwd=123" providerName="System.Data.SqlClient"/>
  </connectionStrings>
    <system.web>
       <profile defaultProvider="DefaultProfileProvider" >
        <providers>
          <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider" connectionStringName="DefaultConnection" applicationName="/"/>
        </providers>
      </profile>
      <membership defaultProvider="AspNetSqlMembershipProvider">
        <providers>
          <clear/>
          <add
                name="AspNetSqlMembershipProvider"
                type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
                connectionStringName="DefaultConnection"---鏈接字符串名
                enablePasswordRetrieval="false"---是否容許找回密碼    
                enablePasswordReset="true"---是否容許重置密碼
                requiresQuestionAndAnswer="false"---是否設置問題和答案
                requiresUniqueEmail="true"---是否連接惟一郵箱
                maxInvalidPasswordAttempts="3"---密碼最多試錯次數
                minRequiredPasswordLength="6"---密碼最小設置長度
                minRequiredNonalphanumericCharacters="0"---(密碼中)非字母字符最小個數
                passwordAttemptWindow="10"
                applicationName="/" />
        </providers>
      </membership>
      <roleManager enabled="true" cacheRolesInCookie="true">
        <providers>
          <clear/>
          <add connectionStringName="DefaultConnection" applicationName="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
        </providers>
      </roleManager>
      <compilation debug="false" targetFramework="4.0" />
    </system.web>
</configuration>
3.作界面
4.寫代碼
a. 導入命名空間:using System.Web.Security;
b.MembersShip類,MemberShipUser類

功能:
(1)添加用戶
(2)登陸驗證
(3)全部用戶的顯示
(4)根據用戶名查找用戶對象
(5)設置用戶是否可用

添加用戶:

Membership.CreateUser(txtUID.Text, txtPWD1.Text, txtEmail.Text);---基本參數

MembershipCreateStatus state;
Membership.CreateUser(txtUID.Text, txtPWD1.Text, txtEmail.Text,txtQuestion.Text,txtAnswer.Text,false,out state);---完整參數

MembershipCreateStatus state;
Membership.CreateUser(txtUID.Text, txtPWD1.Text, txtEmail.Text,txtQuestion.Text,txtAnswer.Text,false,out state);
if (state == MembershipCreateStatus.Success)
  {
           Literal1.Text = "用戶建立成功";
  }

配合SQLServer使用,dbo.aspnet_Membership表右鍵"編輯前200行",單擊"執行"便可看到註冊成功的新數據

protected void Page_Load(object sender, EventArgs e)
   {
        if (!IsPostBack)
        {
            MembershipUserCollection muc = Membership.GetAllUsers();
            GridView1.DataSource = muc;
            GridView1.DataBind();
        }
  }

在瀏覽器中運行便可顯示全部用戶數據

【用戶登陸驗證完整代碼】

【建立代碼】

 protected void btnRegister_Click(object sender, EventArgs e)
    {
        MembershipCreateStatus state;
        Membership.CreateUser(txtUID.Text, txtPWD1.Text, txtEmail.Text,txtQuestion.Text,txtAnswer.Text,false,out state);
        if (state == MembershipCreateStatus.Success)
        {
            Literal1.Text = "用戶建立成功";
        }
    }

【建立源】

<title></title>
</head>
<body>
    <form id="form1" runat="server">
        <h2>建立用戶</h2>
    <div>
   
        用戶名:<asp:TextBox ID="txtUID" runat="server"></asp:TextBox>
        <br />
        密碼:<asp:TextBox ID="txtPWD1" runat="server"></asp:TextBox>
        <br />
        確認密碼:<asp:TextBox ID="txtPWD2" runat="server" Height="16px"></asp:TextBox>
        <br />
        郵箱:<asp:TextBox ID="txtEmail" runat="server"></asp:TextBox>
        <br />
        問題:<asp:TextBox ID="txtQuestion" runat="server"></asp:TextBox>
        <br />
        答案:<asp:TextBox ID="txtAnswer" runat="server"></asp:TextBox>
        <br />
        <asp:Button ID="btnRegister" runat="server" Text="註冊" OnClick="btnRegister_Click" />
   
        <br />
        <asp:Literal ID="Literal1" runat="server"></asp:Literal>
   
    </div>
    </form>
</body>

【顯示代碼】

using System.Web.Security;
public partial class XianShiYongHu : System.Web.UI.Page
{
    public string SetKey()
    {
        return Eval("UserName").ToString();
    }
    public string ShowApproved()
    {
        bool isapproved = (bool)Eval("ShowApproved");
        return isapproved?"點擊禁用":"點擊啓用";
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ShowUsers();---private void ShowUsers代碼部分的提取方法
        }
    }

    private void ShowUsers()---!IsPostBack右鍵提取方法生成
    {
        MembershipUserCollection muc = Membership.GetAllUsers();
        GridView1.DataSource = muc;
        GridView1.DataBind();
    }---!IsPostBack右鍵提取方法生成
    protected void btnApproved_Click(object sender, EventArgs e)
    {
        Button btn = sender as Button;
        string key = btn.CommandArgument.ToString();//主鍵(用戶名)
        MembershipUser user=Membership.GetUser(key);//數據庫中找到人員對象
        user.IsApproved = !user.IsApproved;//修改人員對象狀態
        Membership.UpdateUser(user);//數據庫中更新user對象
        ShowUsers();
    }
}

【顯示源】

<title></title>
</head>
<body>
    <form id="form1" runat="server">
        <h2>顯示全部用戶</h2>
    <div>
   
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" BackColor="White" BorderColor="White" BorderStyle="Ridge" BorderWidth="2px" CellPadding="3" CellSpacing="1" GridLines="None" HorizontalAlign="Center" Width="100%">
            <Columns>
                <asp:BoundField DataField="UserName" HeaderText="用戶名" />
                <asp:BoundField DataField="Email" HeaderText="郵箱" />
                <asp:BoundField DataField="PasswordQuestion" HeaderText="問題" />
                <asp:TemplateField HeaderText="是否啓用">
                    <ItemTemplate>
                        <asp:Button ID="btnApproved" runat="server" Text="<%#ShowApproved() %>" CommandArgument="<%#SetKey() %>" OnClick="btnApproved_Click" />
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="IsLockedOut" HeaderText="是否鎖定" />
            </Columns>
            <FooterStyle BackColor="#C6C3C6" ForeColor="Black" />
            <HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#E7E7FF" />
            <PagerStyle BackColor="#C6C3C6" ForeColor="Black" HorizontalAlign="Right" />
            <RowStyle BackColor="#DEDFDE" ForeColor="Black" />
            <SelectedRowStyle BackColor="#9471DE" Font-Bold="True" ForeColor="White" />
            <SortedAscendingCellStyle BackColor="#F1F1F1" />
            <SortedAscendingHeaderStyle BackColor="#594B9C" />
            <SortedDescendingCellStyle BackColor="#CAC9C9" />
            <SortedDescendingHeaderStyle BackColor="#33276A" />
        </asp:GridView>
   
    </div>
    </form>
</body>

【登陸代碼】

using System.Web.Security;
public partial class DengLu : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

 

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        bool isOK = Membership.ValidateUser(txtUID.Text, txtPWD.Text);
        if (isOK == true)
        {
            Response.Redirect("XianShiYongHu.aspx");
        }
    }
}

【登陸源】

 <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <h2>登陸</h2>
    <div>
   
        用戶名:<asp:TextBox ID="txtUID" runat="server"></asp:TextBox>
        <br />
        密碼:<asp:TextBox ID="txtPWD" runat="server"></asp:TextBox>
        <br />
        <asp:Button ID="Button1" runat="server" Text="登陸" OnClick="Button1_Click" />
   
    </div>
    </form>
</body>

【用戶登陸驗證添加修改】

【建立源】

<title></title>
</head>
<body>
    <form id="form1" runat="server">
        <h2>建立用戶</h2>
    <div>
   
        用戶名:<asp:TextBox ID="txtUID" runat="server"></asp:TextBox>
        <br />
        密碼:<asp:TextBox ID="txtPWD1" runat="server"></asp:TextBox>
        <br />
        確認密碼:<asp:TextBox ID="txtPWD2" runat="server" Height="16px"></asp:TextBox>
        <br />
        郵箱:<asp:TextBox ID="txtEmail" runat="server"></asp:TextBox>
        <br />
        問題:<asp:TextBox ID="txtQuestion" runat="server"></asp:TextBox>
        <br />
        答案:<asp:TextBox ID="txtAnswer" runat="server"></asp:TextBox>
        <br />
        <asp:Button ID="btnRegister" runat="server" Text="註冊" OnClick="btnRegister_Click" />
   
        <br />
        <asp:Literal ID="Literal1" runat="server"></asp:Literal>
   
    </div>
    </form>
</body>

【建立代碼】

using System.Web.Security;
public partial class ChuangJianYongHu : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void btnRegister_Click(object sender, EventArgs e)
    {
        MembershipCreateStatus state;
        Membership.CreateUser(txtUID.Text, txtPWD1.Text, txtEmail.Text,txtQuestion.Text,txtAnswer.Text,false,out state);
        if (state == MembershipCreateStatus.Success)
        {
            Literal1.Text = "用戶建立成功";
        }
    }
}

【顯示源】

 <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <h2>顯示全部用戶</h2>
    <div>
   
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" BackColor="White" BorderColor="White" BorderStyle="Ridge" BorderWidth="2px" CellPadding="3" CellSpacing="1" GridLines="None" HorizontalAlign="Center" Width="100%" Font-Size="15px" OnRowDeleting="GridView1_RowDeleting">
            <Columns>
                <asp:BoundField DataField="UserName" HeaderText="用戶名" />
                <asp:BoundField DataField="Email" HeaderText="郵箱" />
                <asp:BoundField DataField="PasswordQuestion" HeaderText="問題" />
                <asp:TemplateField HeaderText="是否啓用">
                    <ItemTemplate>
                        <asp:Button ID="btnApproved" runat="server" Text="<%#ShowApproved() %>" CommandArgument="<%#SetKey() %>" OnClick="btnApproved_Click" />
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="鎖定狀態">
                    <ItemTemplate>
                        <asp:Label ID="lblUnlock" runat="server" Visible="<%#ShowLockState() %>" Text="正常狀態"></asp:Label>
                        <asp:Button ID="btnUnlock" runat="server" Visible="<%#!ShowLockState() %>" CommandArgument="<%#SetKey() %>" OnClick="btnUnlock_Click" Text="點擊解鎖" />
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField ShowHeader="False">
                    <ItemTemplate>
                        <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandArgument="<%#SetKey() %>" OnClick="LinkButton1_Click" Text="刪除"></asp:LinkButton>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:CommandField ShowDeleteButton="True" />
            </Columns>
            <FooterStyle BackColor="#C6C3C6" ForeColor="Black" />
            <HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#E7E7FF" />
            <PagerStyle BackColor="#C6C3C6" ForeColor="Black" HorizontalAlign="Right" />
            <RowStyle BackColor="#DEDFDE" ForeColor="Black" />
            <SelectedRowStyle BackColor="#9471DE" Font-Bold="True" ForeColor="White" />
            <SortedAscendingCellStyle BackColor="#F1F1F1" />
            <SortedAscendingHeaderStyle BackColor="#594B9C" />
            <SortedDescendingCellStyle BackColor="#CAC9C9" />
            <SortedDescendingHeaderStyle BackColor="#33276A" />
        </asp:GridView>
   
    </div>
    </form>
</body>

【顯示代碼】

using System.Web.Security;
public partial class XianShiYongHu : System.Web.UI.Page
{
    public bool ShowLockState()
    {
        bool isLocked=(bool)Eval("IsLockedOut");
        return !isLocked;//返回true即鎖定狀態,返回false即解鎖狀態
    }
    public string SetKey()
    {
        return Eval("UserName").ToString();
    }
    public string ShowApproved()
    {
        bool isapproved = (bool)Eval("ShowApproved");
        return isapproved?"點擊禁用":"點擊啓用";
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ShowUsers();
        }
    }
    private void ShowUsers()
    {
        MembershipUserCollection muc = Membership.GetAllUsers();
        GridView1.DataSource = muc;
        GridView1.DataBind();
    }
    protected void btnApproved_Click(object sender, EventArgs e)
    {
        Button btn = sender as Button;
        string key = btn.CommandArgument.ToString();//主鍵(用戶名)
        MembershipUser user=Membership.GetUser(key);//數據庫中找到人員對象
        user.IsApproved = !user.IsApproved;//修改人員對象狀態
        Membership.UpdateUser(user);//數據庫中更新user對象
        ShowUsers();
    }
    protected void btnUnlock_Click(object sender, EventArgs e)
    {
        Button btn = sender as Button;
        //取主鍵
        string key = btn.CommandArgument.ToString();
        //解鎖
        MembershipUser user = Membership.GetUser(key);
        user.UnlockUser();
        //刷新
        ShowUsers();
    }
    protected void LinkButton1_Click(object sender, EventArgs e)
    {
        LinkButton btn = sender as LinkButton;
        //取主鍵
        string key=btn.CommandArgument.ToString();
        //刪除
        Membership.DeleteUser(key);
        //刷新
        ShowUsers();
    }
    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        //取主鍵
        string key = e.Keys["UserName"].ToString();
        //刪除
        Membership.DeleteUser(key);
        //刷新
        ShowUsers();
    }
}

【登陸源】

<title></title>
</head>
<body>
    <form id="form1" runat="server">
        <h2>登陸</h2>
    <div>
   
        用戶名:<asp:TextBox ID="txtUID" runat="server"></asp:TextBox>
        <br />
        密碼:<asp:TextBox ID="txtPWD" runat="server"></asp:TextBox>
        <br />
        <asp:Button ID="Button1" runat="server" Text="登陸" OnClick="Button1_Click" />
   
    </div>
    </form>
</body>

【登陸代碼】

using System.Web.Security;
public partial class DengLu : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

 

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        bool isOK = Membership.ValidateUser(txtUID.Text, txtPWD.Text);
        if (isOK == true)
        {
            Response.Redirect("XianShiYongHu.aspx");
        }
    }
}

【角色管理源】

<title></title>
</head>
<body>
    <form id="form1" runat="server">
        <h2>角色管理</h2>
    <div>
   
        <asp:ListBox ID="ListBox1" runat="server" Height="162px" Width="192px"></asp:ListBox>
   
    </div>
        <div>

            角色名:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            <br />
            <asp:Button ID="txtRoleID" runat="server" OnClick="Button1_Click" Text="添加" />

            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click1" Text="刪除" /> 

        </div>
    </form>
</body>

【角色管理代碼】

using System.Web.Security;
public partial class JueSeGuanLi : System.Web.UI.Page
{
    private void ShowRoles()
    {
        ListBox1.Items.Clear();
        string[]roles=Roles.GetAllRoles();
        foreach (string role in roles)
        {
            ListBox1.Items.Add(role);
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack)
        {
            ShowRoles();
        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        if (Roles.RoleExists(txtRoleID.Text =false))
        {
            Roles.CreateRole(txtRoleID.Text);
            ShowRoles();
        }
    }
    protected void Button1_Click1(object sender, EventArgs e)
    {
        if (TextBox1.SelectedIndex >= 0)
        {
            string name = ListBox1.SelectedValue;
            Roles.DeleteRole(name);
            ShowRoles();
        }
    }
}

【角色和人員源】

<title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
   
        角色:<asp:DropDownList ID="ddl" runat="server" AutoPostBack="True">
        </asp:DropDownList>
        <br />
        人員:<asp:CheckBoxList ID="cbl" runat="server">
        </asp:CheckBoxList>
   
        <br />
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="肯定" />
   
    </div>
    </form>
</body>

【角色和人員代碼】

using System.Web.Security;
public partial class _Default : System.Web.UI.Page
{
    private void FillRoles()
    {
        ddl.Items.Clear();
        string[] roles=Roles.GetAllRoles();
        foreach(string role in roles)
        {
            ddl.Items.Add(role);
        }
    }
   private void FillUsers()
   {
       MembershipUserCollection muc=Membership.GetAllUsers();
       cbl.DataSource = muc;
       cbl.DataTextField = "UserName";
       cbl.DataValueField = "UserName";
       cbl.DataBind();
   }
   protected void Page_Load(object sender, EventArgs e)
   {
       if (!IsPostBack)
       {
           FillRoles();
           FillUsers();
           LoadUserForRole();
       }
   }
   protected void Button1_Click(object sender, EventArgs e)
   {
       //取出選中角色
       string role = ddl.SelectedValue;
       //取出選中用戶
       List<string> users = new List<string>();
       foreach (ListItem li in cbl.Items)
       {
           if (li.Selected == true)
           {
               users.Add(li.Value);
           }
       }
       //進行匹配
       //所有刪除
       //1.找到當前角色中用戶
       string[] YuanYouYongHu = Roles.GetUsersInRole(role);     
       //2.刪除用戶的當前角色
       if (YuanYouYongHu.Length > 0)
       {
           Roles.RemoveUsersFromRole(YuanYouYongHu, role);
       }
       //所有加載
       Roles.AddUsersToRole(users.ToArray(),role);
   }
   protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
   {
       LoadUserForRole();
   }

   private void LoadUserForRole()
   {
       cbl.SelectedIndex = -1;
       string key = ddl.SelectedValue;
       //找角色的用戶
       string[] users = Roles.GetUsersInRole(key);
       //在界面勾選角色
       foreach (ListItem li in cbl.Items)
       {
           if (users.Contains(li.Value))//模糊查詢
           {
               li.Selected = true;
           }
       }
   }
}

2015.9.14-9.15

【WPF入門】

幾個屬性:

可經過代碼也可經過屬性修改窗體標題、大小
Content-文字內容
FontSize-字體大小
FontWeight(Normal)-普通大小
FontWeight(Bold)-字體加粗
Margin-文字距窗體邊界邊距
HorizontalAlignment-水平對齊
VerticalAlignment-豎直對齊

ResizeMode(窗體)調整模式
CanResize-可調
CanMinimize-可最小化(最大化按鈕不可用)
NoRisize-不可調
CanResizeWithGrip-可調(右下角有角標,示意窗體大小可調)

TopMost-窗體置頂(打開多個頁面時,窗體總在最上)

WindowStartupLocation窗體初始位置
Manual-手動
CenterScreen-居中

WindowState窗體狀態
Normal-普通大小
Maximized-啓動即窗體最大化

WindowStyle窗體樣式
None-沒邊框
SingleBorderWindow-普通平面邊框
ThreeDBorderWindow-3D立體邊框
ToolWindow-只有關閉按鈕的窗體模式

面板(Panel)
StackPanel棧面板
Orientation-按鈕對齊方式 Horizontal-水平對齊方式 Vertical-豎直對齊方式
拖進一個Button:
Margin="10" Button到四周邊距等距
Margin="10,5" 第一個數字表明Button到左右兩邊邊距,第二個數字表明Button到上下兩邊邊距
Margin="10,5,10,5" 四個數字分別表明Button到"左、上、右、下"的距離(與網頁Margin設置不一樣,網頁是"上、右、下、左")
WrapPanel環繞面板
Button可隨窗體大小自動調整排列方式
DockPanel停靠面板
窗體內元素貼邊排列
Canvas畫布
可精肯定位元素
Grid網格面板
UniformGrid均佈網格

2015.9.19

dictioanry表內排序

protected void Button1_Click(object sender, EventArgs e)
{
        Dictionary<int, string> dics = new Dictionary<int, string>();
        dics.Add(1,"aaaa");
        dics.Add(5,"bbbb");
        dics.Add(3,"cccc");
        dics.Add(2,"dddd");
        dics.Add(4,"eeee");
       
        dics=dics.OrderBy(p=>p.Key).ToDictionary(p=>p.Key,p=>p.Value);

        foreach (KeyValuePair<int, string> item in dics)
        {
            Response.Write(item.Key+"---"+item.Value);
            Response.Write("<br>");
        }
}

序列化:內存對象--->流
反序列化:流--->內存中的對象

1.命名空間:
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

2.類:
FileStream
SerializeFormatter

3.方法:
Serilize()
Deserilize()

【例】

Student類代碼

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

[Serializable]
public class Student
{
    public string Name;
    public bool Sex;
    public string Nation;
    public DateTime Birthday;

    public string Speak()
    {
        return Name + Sex + Nation + Birthday;
    }
}

新建窗體,拖拽按鈕進去

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Runtime.Serialization.Formatters.Binary;//序列化命名空間
using System.IO;//流命名空間

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        //1、造對象
        Student s = new Student();
        s.Name = "流冰";
        s.Sex = true;
        s.Nation = "漢族";
        s.Birthday = new DateTime(2015,9,3);
        //2、把對象放到流中去
        //1.準備流放置對象
        string filePath = Server.MapPath("saves/" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".txt");
        FileStream fs = new FileStream(filePath,FileMode.OpenOrCreate);
        //2.進行序列化
        BinaryFormatter formatter = new BinaryFormatter();
        formatter.Serialize(fs, s);
        //3.關閉流
        fs.Close();
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        //準備流放置對象
        string filePath = Server.MapPath("saves/20150920060036.txt");
        FileStream fs = new FileStream(filePath, FileMode.Open);
        //從流裏面反序列化成對象
        BinaryFormatter bf = new BinaryFormatter();
        Student s = bf.Deserialize(fs) as Student;
        //關閉流
        fs.Close();

        this.Title = s.Speak();
    }
}

2015.9.21

【ASPCMS】

文件名後綴.asa-access數據庫文件

相關文章
相關標籤/搜索