欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.NET笔记之 控件与母板的区别分析

程序员文章站 2024-03-01 22:26:04
1、asp.net的好坏处 codebehind:“前aspx后cs”的模式,(1、aspx(控件定义、html、css)控制页面长相,cs控制程序逻辑aspx就是模板引...

1、asp.net的好坏处

codebehind:“前aspx后cs”的模式,
(1、aspx(控件定义、html、css)控制页面长相,cs控制程序逻辑
aspx就是模板引擎,不需要再去寻找第三方的模板引擎
(2、aspx中调用cs的成员级别必须是protected或者public不能是private
因为当前this执行的是当前的子类(通过反编译查看)

ASP.NET笔记之 控件与母板的区别分析

2、

ASP.NET笔记之 控件与母板的区别分析

literal:
mode属性,避免xss攻击

textbox:
autopostback=true 焦点离开textbox提交表单
asp.net中经常不直接调用submit而是调用_dopostback方法提交表单
testchanged事件配合autopostback可以点击submit自动提交表单更新输入文本

button:onclientclick
return confirm("真的要执行吗?")

ASP.NET笔记之 控件与母板的区别分析

ASP.NET笔记之 控件与母板的区别分析

3、button、linkbutton、imagebutton让多个控件共享一个处理函数:
command属性设置响应函数
commandargument=“daomul”(命令参数传参数)
commandname=“remove”(名字)

4、

panal:
弄成"高级设置"(fieldset)的渲染形式:groupingtext=“高级设置”

hyperlink:引用站内内部资源的时候很方便(自动转换路径)
navigateurl属性

ASP.NET笔记之 控件与母板的区别分析

5、

fileupload:
fileuploadl.hasfile:用户是否选择了文件
fileuploadl.saveas("根目录全路径"):
server.mapath或者virtualpathutility.toabsolute都可以
path=server.mapath(“~/upload/”);

漏洞:(只允许上传指定类型的文件)

system.io.file.delete(server.mapath.("~/upload/"));
system.io.file.readalltext(server.mapath.("~/upload/"));

6、实例:注册界面

register.aspx

复制代码 代码如下:

 <%@ page language="c#" autoeventwireup="true" codebehind="register.aspx.cs" inherits="登陆注册.register" %>

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<body>
    <form id="form1" runat="server">
    <div>
        <table border="0" cellpadding="0" cellspacing="0">
            <tr>
                <td>
                    <asp:label id="labelname" runat="server" text="姓名"></asp:label>
                </td>
                <td>
                    <asp:textbox id="txtusername" runat="server" autopostback="true"
                        ontextchanged="txtusername_textchanged"></asp:textbox>
                    <asp:label id="errormsg" runat="server"
                            text="label" cssclass="error" visible="false"></asp:label>
                </td>
            </tr>

           <tr>
                <td>
                    <asp:label id="label2" runat="server" text="密码"></asp:label>
                </td>
                <td>
                    <asp:textbox id="txtpassword" runat="server"></asp:textbox>
                    密码强度:
                    <span id="spanpassword" ></span>
                </td>
            </tr>

            <tr>
                <td>
                    <asp:label id="label3" runat="server" text="重复输入密码"></asp:label>
                </td>
                <td>
                    <asp:textbox id="txtpassword_second" runat="server"></asp:textbox>
                </td>
            </tr>

            <tr>
                <td>
                    <asp:label id="label4" runat="server" text="邮箱"></asp:label>
                </td>
                <td>
                    <asp:textbox id="txtemail" runat="server"></asp:textbox>
                </td>
            </tr>

            <tr>
                <td>
                    <asp:button id="btnregister" runat="server" text="注册"
                        onclick="btnregister_click" />
                </td>
            </tr>
            <tr>
                <td>
                    <asp:label id="labelerrormsg" runat="server" visible="false"></asp:label>
                </td>
            </tr>
        </table>
    </div>
    </form>
</body>
<head id="head1" runat="server">
    <style type="text/css">
        .error{background:red;}
    </style>
    <title>注册用户</title>
    <script src="scripts/jquery-1.4.1.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(function () {
            $("#<%=txtpassword.clientid %>").blur(function () {
                var str = $(this).val();
                if (str.length <= 6) {
                    $("#spanpassword").text("弱");
                }
                else {
                    //含有数字、字母
                    var check = /\w/;
                    if (check.test(str)) {
                        $("#spanpassword").text("强");
                    }
                    else {
                        $("#spanpassword").text("中");
                    }
                }

            });
            $("#<%=form1.clientid %>").submit(function () {
                var pas1 = $("#<%=txtpassword.clientid %>").val();
                var pas2 = $("#<%=txtpassword_second.clientid %>").val();
                if (pas1 != pas2) {
                    alert("两次输入密码不一致,请重新输入");
                    return;
                }
                var semail = $("#<%=txtemail.clientid %>").val();
                var check = /.+@.+/;
                if (!check.test(semail)) {
                    alert("邮箱格式不正确,请重新输入");
                    return;
                }
            });
        });</script>
</head>
</html>
 


register.apsx.cs
复制代码 代码如下:

using system;
 using system.collections.generic;
 using system.linq;
 using system.web;
 using system.web.ui;
 using system.web.ui.webcontrols;
 using 登陆注册.dal.dataset1tableadapters;
 using system.text.regularexpressions;

 namespace 登陆注册
 {
     public partial class register : system.web.ui.page
     {
         protected void page_load(object sender, eventargs e)
         {

         }

         protected void btnregister_click(object sender, eventargs e)
         {
             //服务器版测试是否符合要求:邮箱饿坏密码
             if (txtpassword.text != txtpassword_second.text)
             {
                 labelerrormsg.text = "密码不一致!";
                 labelerrormsg.visible = true;
                 return;
             }
             regex reemail = new regex(@".+@.+");
             if (!reemail.ismatch(txtemail.text))
             {
                 labelerrormsg.text = "email格式不正确!";
                 labelerrormsg.visible = true;
                 return;
             }
             labelerrormsg.visible = false;
             t_userinfotableadapter adapter = new t_userinfotableadapter();
             if (adapter.getdatabyusername(txtusername.text).count >= 1)
             {
                 errormsg.visible = true;
                 errormsg.text = "用户名重复,请重新输入!";
                 return;
             }
             long userid=convert.toint64(adapter.insertuser(txtusername.text, txtpassword.text,
                 txtemail.text));
             //读取session登陆信息
             session["登陆id"] = userid;
             session["登陆标记"] = true;
             //设置可以传参数的公共跳转页面
             //作用1:告诉用户注册成功,作用2:防止用户点击刷新重复提交数据
             response.redirect("target.aspx?msg=注册成功即将转向登陆界面&redirecturl=login.aspx");
         }

         protected void txtusername_textchanged(object sender, eventargs e)
         {
             t_userinfotableadapter adapter = new t_userinfotableadapter();
             if (adapter.getdatabyusername(txtusername.text).count >= 1) {
                 errormsg.visible = true;
                 errormsg.text = "用户名重复,请重新输入!";
             }
             else{
                 errormsg.visible = false;
             }
         }
     }
 }

其中要用到的正则表达式:

ASP.NET笔记之 控件与母板的区别分析

ASP.NET笔记之 控件与母板的区别分析

插入数据记录:insert into [dbo].[t_userinfo] ([susername], [spassword], [email])  output inserted.id values (@susername, @spassword, @email)

(1、增加sql语句,

(2、增加一个output insert.id 在insert语句当中
(3、设置executemode属性为scalar

7、三种控件的区别:html控件、服务端控件。runat=server 的控件(最好)

a1.attributes("aaa")="建属性赋值";

ASP.NET笔记之 控件与母板的区别分析

8、验证控件

ASP.NET笔记之 控件与母板的区别分析

(1、 requiredfieldval:
设置哪个控件和显示名称(还有causesvaldation焦点移开) -----为空
初始值:initlevalue(请输入关键字、包括下拉框的初始值)

ASP.NET笔记之 控件与母板的区别分析

validator共性
!!!!!!!!!!
if(!isvalid){return;}
if(this.isvalid){//防止跳过客户端校验isvalid表示页面中所有validator是否都通过了
label1.text="";
}
else{
label1.text="客户端填写不足或有错误";
}

ASP.NET笔记之 控件与母板的区别分析

ASP.NET笔记之 控件与母板的区别分析

validstiongroup 分组(表单可以在页面内单个组提交,而不关联其他组)相同于按钮的name

(2、rangevalidator:范围验证
最大最小比较
    date.now.()baidu下

ASP.NET笔记之 控件与母板的区别分析

(3、只有requiredfieldvalidator可以对字段为空进行验证

(4、comparevalidator:比较验证(类型校验、与其他控件比较、)
       controltocompare设置为要比较的控件

ASP.NET笔记之 控件与母板的区别分析

regularexpression:

vaildationexpression 正则表达式验证

customvaildate自定义控件验证

servervalidate服务端校验代码
clientvlidtionfunction

ASP.NET笔记之 控件与母板的区别分析

(5、validationsummary汇总错误信息
text 和errormsg的区别,errormsg就是用于validationsummary中,
而text则是直接显示在验证控件位置

ASP.NET笔记之 控件与母板的区别分析

ASP.NET笔记之 控件与母板的区别分析

 

 母版:

//操作模板页的控件
button btn=(button)this.master.findcontrol("button1");
btn.visible=!btn.vissble;

this.master.mapath();

虚拟路径转化为客户端访问的路径(不是服务端控件):
src="<%=resolveclienturl%>"

this.resolveclienturl();
resolveclienturl:考虑当前页面的路径
resolveurl:生成一个从根开始的路径

ASP.NET笔记之 控件与母板的区别分析

ASP.NET笔记之 控件与母板的区别分析