ASP.NET中级学习3
注册练习:
验证码的生成:
public void ProcessRequest(HttpContext context)
{
string str="";Random r=new Random();
for (int i = 0; i <= 4; i++)
{
int j=r.Next(10);
str = str + j;
}
context.Session["YanZheng"] = str;
context.Response.ContentType = "image/JPEG";
using (System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(55,20))
{
using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap))
{
g.DrawString(str, new System.Drawing.Font("宋?体¬?", 14), System.Drawing.Brushes.Red, 0, 0);
}
bitmap.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
}
}
C#中的正则表达式于js中差不多
三种控件:
HTML控件,Asp.Net把控件当成普通的字符串渲染到浏览器端,不去检验正确性、无法在服务器端进行处理。(元素写错了也不会报错)
Asp.net服务端控件,进过Asp.net高度封装的控件,使用简单,运行在服务器端,可以在服务器端使用C#代码进行操作,会渲染到客户端为HTML控件。
runat=server的HTML控件。在HTML控件的基础上添加 runat=server,也是运行在服务器端的,也可以使用C#代码进行操作,也会渲染到客户端,不像Asp.net服务器控件那么高度封装,暴露的属性大部分是普通HTML属性。和Asp.net服务器控件相比的好处是:当需要在服务器端对控件进行操作的时候,如果控件没有被Asp.net服务端控件封装的时候,用ruant=Server的html控件很方便,runat=Server的html控件也会对虚拟路径、id->ClientID进行处理,所以在虚拟路径、usercontrol中也可能会用到 (可以用来操作超链接,<tr><td>
div等非控件加runat=server后,会变成HtmlControls.HtmlGenericControl类型的控件
封装了一些属性,如果想操作其他未封装的属性如“class”css样式类,可以通过div1.Attributes["class"] = "error"; 进行操作,这样的话,就可以使得div的样式为:error了。
a-àHtmlAnchor; form-àHtmlForm; head-àHtmlHead;
inputàHtmlInputButton HTmlInpuCheckBox HtmlInputText等、metaàHtmlMeat; HtmlTable、HtmlTableRow HtmlTableCell; HtmlTitle .未单独封装(如div)对应类型为HtmlGenericControl。使用Attributes属性操作为封装的属性。
验证控件:
不能为空校验:InitialValue="请填写姓名” 设定初始值,当控件是该值时,认为空。
页面中的IsValid属性用来判断页面中的所有Validator是否都校验通过了,只有都通过了才为True,几时页面中的Validator服务端校验报错,在服务器端方法中的业务代码也会被执行,因此如果代码在数据校验不通过时不让执行,则需要判断IsValid的值。
<span style="display:none">看不到我</span> 不占据空间
<span style="visibility:hidden">看不到我</span> 会占据空间
验证控件都有display属性,用来决定如何显示错误信息。有三个值:static:没有错误信息的时候控件的visiblity样式为hidden来实现隐藏。Dynamic:没有错误信息的时候用display样式为none来实现隐藏。还有一个为None。
都会在客户端和服务器端同时校验。
可以通过设置ValidationGroup来为其分组,有时候一个页面有两个表单,为使其互不干扰,就可以为其分组。类似于radiobutton。
如果将按钮控件的CausesValidation属性设为false,则这个按钮的点击不触发校验。
范围验证控件:RangeValidator。有Date,String,Double,int,等多种类型的数据可以选用,范围可以编程动态的设定。
正则表达式验证:可以自定义验证表达式:比如QQ号(5-11位的数字)\d{5,11}
个人说明10到50字之间 \w{10,50}
每个验证控件都有ErrorMessage、Text两个属性,ErrorMessage是用来显示到ValidationSummary控件中的值,Text是用来显示到验证控件上面的值,如果Text为空,则ErrorMessage会同时显示到汇总控件和验证控件上面。
母版页
母版页中,对图片的引用,可以会出现路径问题,需要用服务器端图片控件。
并将其路径设为相对路径,相对应用的路径。例如:ImageUrl=”~/images/banner.jpg” ;
也可以用ruant=server的HTML控件 src=”~/images/banner.jpg” ;
如果不希望用服务端控件占用过多资源,也可以通过ResolveClientUrl(”~/images/banner.jpg” )方法结合“html页面使用C#后台代码的方式:
<%= ResolveClientUrl(”~/images/banner.jpg” )%>动态转换路径。
<%@ Page Title="首页" Language="C#" MasterPageFile="~/母版/MyMaster1.Master" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="注册练习.WebForm1" %>
使用了母版的具体页面,需要改标题:只需更改最上边的 Page Title= “xx”.就ok了。
母版页中的服务器端控件必须放到runat=Server的form中。
如需在具体页面中操作母版页中的服务端控件,用到如下方法:
Button b = (Button)this.Master.FindControl("btnMaster");
b.Visible=false;
数据绑定控件简介
从数据绑定开始用WebApplication,否则会有很多麻烦。
数据绑定分为数据源和数据绑定控件两部分、数据绑定控件通过数据源来获得数据,通过数据源来隔离数据提供者和数据使用者,数据绑定控件通过数据源来对数据进行修改。
数据源有SqlDataSource、AccessDataSource、ObjectDataSource、LinqDataSource、EntityDataSource、XmlDataSource等,由于大部分项目都不会页面直接连接数据库(因为违反了最基本的分层原则),所以SqlDataSource,AccessDataSource都不会使用,LinqDataSource、EntityDataSource也是只有在很极端的采用Linq,EF的项目中才会用到。
XmlDataSource是处理xml数据时才可能会用。ObjectDataSource是web开发中应用最广的数据源,也能很容易的进行数据库切换。
数据绑定控件有列表数据绑定控件(DropDownList、 RadioButtonList、ListBox、CheckBoxList、BulletedList等)和复杂控件(DataGrid(2.0之后就没用了),GridView、DetailsView、FormView、ListView、Repeater、DataList)GridView等都是ListView子集。
Repeater是最轻量级的组件。在互联网的前台用的最多,ListView是ASP.Net3.5中新增的控件,ListView是GridView、DetailsView、FormView、Repeater、DataList等控件的大一统,那些控件的优点ListView全都有,会了ListView,其他控件就会用了,因此数据绑定控件主要讲列表数据绑定控件、Repeater和ListView,项目中会用到FormView、GridView。