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

1、ASP.NET的好坏处

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

2、

Literal:
Mode属性,避免XSS攻击

TextBox:
AutopostBack=true 焦点离开Textbox提交表单
ASP.NET中经常不直接调用submit而是调用_doPostBack方法提交表单
TestChanged事件配合AutopostBack可以点击submit自动提交表单更新输入文本

Button:OnCLientClick
return confirm("真的要执行吗?")

3、Button、LinkButton、ImageButton让多个控件共享一个处理函数:
command属性设置响应函数
CommandArgument=“daomul”(命令参数传参数)
CommandName=“Remove”(名字)

4、

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

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

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

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

插入数据记录: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")="建属性赋值";

8、验证控件

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

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

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

(2、RangeValidator:范围验证
最大最小比较
    Date.Now.()baidu下

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

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

RegularExpression:

VaildationExpression 正则表达式验证

CustomVaildate自定义控件验证

ServerValidate服务端校验代码
ClientVlidtionFunction

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

母版:

//操作模板页的控件
Button btn=(Button)this.Master.FindControl("Button1");
btn.Visible=!btn.Vissble;

this.Master.Mapath();

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

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

(0)

相关推荐

  • asp.net 中静态方法和动态方法调用的区别实例分析

    复制代码 代码如下: //定义静态方法class SQLHelper       {        public static string aaa()        {            return "你好"               }    } 调用:SQLHelper.aaa(); // 类名.方法名 //定义动态方法class SQLHelper       {        public string aaa()        {            return

  • asp.net中DBNull.Value,null,String.Empty区别浅析

    首先,"null"是C#中(VB.NET为Nothing),表示某个引用对象变量"未引用"任何实体时候的状况(典型症状是如果调用这个变量的某个方法,会抛出NullException之类的异常). String.Empty是一个静态的公共变量,表示某String变量不包含任何字符(等同于"").不过从性能上说,用String.Empty比声明用一个""好一些--显然地,前者是String类的静态变量,无论如何使用只产生一个实例,

  • Asp.net中Response.Charset与Response.ContentEncoding区别示例分析

    本文以示例形式分析了Asp.net中Response.Charset与Response.ContentEncoding的区别,分享给大家供大家参考.具体如下: 1.Response.Charset  ASP.NET 中示例: <%@ Page CodePage=936 %> CodePage 告诉 IIS 按什么编码来读取 QueryString,按什么编码转换数据库中的内容-- 2.Response.ContentEncoding 获取或设置输出流的 HTTP 字符集. Response.C

  • ASP.NET小结之MVC, MVP, MVVM比较以及区别(二)

    上一篇得到大家的关注,非常感谢.由于自己对于这些模式的理解也是有限,对于这些模式的比较,是结合自己的理解,一些地方不一定准确,但是只有亮出自己的观点,才能抛砖引玉不是? 欢迎各位拍砖.:) 复制代码 代码如下: 阅读目录: 四. MVP模式 4.1 MVP的思想 4.2 UI界面接口化 4.3 Presenter -- Model和View之间的桥梁 4.4 MVP的代码结构和时序图 4.5 MVP模式总结 五. MVVM模式 5.1 MVVM模式的设计思想 5.2 MVVM模式结构图 六. M

  • 详细说明asp.net中datareader 和 dataset 的区别

    1. 获取数据的方式    DataReader为在线操作数据, DataReader会一直占用SqlConnection连接,在其获得数据过程中其它操作不可以再使用SqlConnection连接对象. 复制代码 代码如下: while(datareader.read()){..............}dataview.datasource=datareader;dataview.databind(); DataSet为离线操作数据,DataSet会将数据一次性读入内存,然后断开连接,这时其它

  • c#.net中const和readonly的区别

    (1) readonly和const都是用来标示常量的.(2) 初始化赋值不同.const修饰的常量必须在声明的同时赋值.例如: 复制代码 代码如下: public class Class1{    public const int MaxValue = 10;       //正确声明    public const MInValue;                   //错误:常量字段要求提供一个值    public Class1()    {        MinValue = 10

  • .net中的session与cookies区别及使用方法

    先介绍一下比较简单的使用方法: 给COOKIES赋值 复制代码 代码如下: Response.Cookies["uid"].Value = "20"; Response.Cookies["LoginCode"].Value = "58469"; 以上就是分别对两个COOKIES变量赋了两个不同的传,那么在使用COOKIES时,我们怎样来控制COOKIES的有效期呢,看下面:  复制代码 代码如下: Response.Cooki

  • .NET MVC中ViewData,ViewBag和TempData的区别浅析

    本文分析了.NET MVC中ViewData,ViewBag和TempData的区别.分享给大家供大家参考.具体分析如下: ViewData和TempData是字典类型,赋值方式用字典方式,如: 复制代码 代码如下: ViewData["myName"] ViewBag是动态类型,使用时直接添加属性赋值即可,如: 复制代码 代码如下: ViewBag.myName ViewBag和ViewData只在当前Action中有效,等同于View TempData可以通过转向继续使用,因为它的

  • ASP.NET小结之MVC, MVP, MVVM比较以及区别(一)

    MVC, MVP和MVVM都是用来解决界面呈现和逻辑代码分离而出现的模式.以前只是对它们有部分的了解,没有深入的研究过,对于一些里面的概念和区别也是一知半解.现在一边查资料,并结合自己的理解,来谈一下对于这三种模式思想的理解,以及它们的区别.欢迎各位高手拍砖. 阅读目录: 复制代码 代码如下: 一. MVC, MVP, MVVM诞生的需求? 二. 一段典型的耦合代码 三. MVC模式 3.1 主动MVC 3.2 被动MVC 3.3 Web应用中的MVC框架 3.4 MVC总结 一,MVC, MV

  • asp.net中virtual和abstract的区别分析

    本文实例分析了asp.net中virtual和abstract的区别,分享给大家供大家参考.具体分析如下: 一.Virtual方法(虚方法) virtual 关键字用于在基类中修饰方法.virtual的使用会有两种情况: 情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法.那么在对派生类实例的调用中,该虚方法使用的是基类定义的方法. 情况2:在基类中定义了virtual方法,然后在派生类中使用override重写该方法.那么在对派生类实例的调用中,该虚方法使用的是派生重写的方

  • .net中as和is之间的区别分析

    1.as 用于在兼容的引用类型之间执行转换,as 运算符类似于强制转换操作:但是,如果转换不可行,as 会返回 null 而不是引发异常.更严格地说,这种形式的表达式:expression as type,等效于expression is type ? (type)expression : (type)null,只是 expression 只被计算一次.注意,as 运算符只执行引用转换和装箱转换.as 运算符无法执行其他转换,如用户定义的转换,这类转换应使用 cast 表达式来执行 as操作符不

随机推荐