• 8.20起


    2015.8.20-2015.8.24

    JQuery
    一、语法的基本结构:
    第一步:导入JQuery脚本包

    从VS的新建web空网站里的"解决方案资源管理器"-"Scripts文件夹"中找到"jquery-1.7.1.min.js"在界面中打开,右键标签栏选择"打开所在的文件夹",找到"jquery-1.7.1.min.js"先右键复制粘贴到桌面上,然后再从桌面右键复制粘贴到新建空网站中
    第二步:写JQuery的ready事件
    $(document).ready(function(){
     //在这里面写代码
    });

    注意:
    1.JQuery的触发时机---浏览器把页面的HTML加载完毕时触发
    2.非侵入性的编码方式
    3.链式结构的编码方式
    4.集合式操作---操作选择器选择出来的一组对象
    二、具体语法
    (一)找到元素
    选择器的种类:同样式表(CSS3.0)
    第一类:基本选择器
    1.最最基本的:标签,ID选择器,class选择器
    2.组合选择器:空格(后代),逗号(并列),标签名.class(筛选),> (子级选择器)
    第二类:过滤选择器
    1.基本过滤(按照HTML标记的书写顺序来过滤)
    :first---选取第一个
    :last---选取最后一个
    :eq(索引号)---选取任意一个
    :lt(索引号)---选取大于某个索引号的
    :gt(索引号)---选取小于某个索引号的
    :odd---选取奇数个
    :even---选取偶数个
    :not(选择器)---排除某几个

    2.属性过滤
    [属性名]---选择拥有某个属性的元素
    [属性名=值]---选取属性名是某个值的
    [属性名!=值]---选取属性名不是某个值的
    [属性名*=值]---选取属性值中包含某个值的
    [属性名^=值]---选取属性名是以某个值开头的
    [属性名$=值]---选取属性值以某个值结尾的

    3.内容过滤
    :has(选择器)---开始与结束标记之间是否包含某类子元素,如果包含就选择出来。
    :contains(字符串)---开始与结束标记之间是否包含某段文字,如果包含就选择出来。

    <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>

    ---鼠标移上文本时背景色变为蓝色,鼠标离开文本时背景色变为绿色
    <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>

    ---鼠标移上文本时字体变大且背景色变为蓝色,鼠标离开文本时背景色变为绿色

      <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.在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

    二、动画
    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;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;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;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({"400px",height:"400px"}, 3000);
                });
            });
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div id="ff" style="border:3px solid orange;background-color:red;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({ "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;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({ "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;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效果】

    一、结构:
    两块代码:服务端代码,客户端代码(发请求之前的代码-主调代码,发请求之后的代码-回调代码)。
                 ---一般来说,我们要先写服务端,再写客户端。客户端代码,先写主调,再写回调。
    问题:如何解决跨语言的数据交换?---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.不需要提供请求数据
    2.需要提供请求数据
    二、返回复杂数据
    1.不需要提供请求数据
    2.需要提供请求数据
    (一)返回对象
    (二)返回集合
    作业:使用Ajax实现数据删除
    一、.ashx文件
    1.获取要删除的主键值
    2.执行删除
    3.输出XML  <?xml version='1.0'?><root>true</root>

    二、.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.结构良好
    3.分工开发
    4.局部缓存

    三、难点
    (一)交换信息:
    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)
       {   //一、获取之前添加的人员列表
           if(Session["list"]==null)
           {
               List<FlowPath>temp=new List<FlowPath>();
               Session["list"]=temp;
           }
           List<FlowPath>list=Session["list"]as List<FlowPath>;
       }
        //二、添加选中人员
        //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;
        //三、重新绑定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)
       {   //一、获取之前添加的人员列表
           if(Session["list"]==null)
           {
               List<FlowPath>temp=new List<FlowPath>();
               Session["list"]=temp;
           }
           List<FlowPath>list=Session["list"]as List<FlowPath>;
       }
        //二、添加选中人员
        //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;
        //三、重新绑定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.FindControl()

    2.事先在母版页中写好属性

    (二)从母版页操作页面
    1.session

    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.代码绑定

    2.数据源控件绑定

    SqlDataSource,LinqDataSource,ObjectDataSource...

    二、外观控制

    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)
        {
            //一、造对象
            Student s = new Student();
            s.Name = "流冰";
            s.Sex = true;
            s.Nation = "汉族";
            s.Birthday = new DateTime(2015,9,3);
            //二、把对象放到流中去
            //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数据库文件

  • 相关阅读:
    搭建CDH的yum本地源
    搭建一个离线yum源
    VMware主机 几次断电后,挂载的磁盘报错了,系统无法启动
    vm workstation15 迁移至ESXi6.7步奏
    ESXi6.7在 ASUS PRIME B360-PLUS 主板上安装报错
    php常用函数
    PHP函数
    php语句
    TSQL语句练习题
    php的基础
  • 原文地址:https://www.cnblogs.com/kxy3-1314/p/4744485.html
Copyright © 2020-2023  润新知