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数据库文件

原文地址:https://www.cnblogs.com/kxy3-1314/p/4744485.html