Asp.Net揭秘读书笔记
Asp.Net揭秘读书笔记
2016年5月16日, 星期一
- runat=“server”属性代表了一个在服务器端执行的asp.net控件;
- 如果在webconfig中添加了命名空间,整个项目就可以使用这个类库了
- asp控件的textbox举例:<asp:Textbox id="textbox1" runat="server" />
- asp:前缀: 指定控件的命名空间
- id,所有控件必须有一个唯一的id,可以在代码引用
- 方法中sender代表引发事件的控件,e代表 与事件关联的附加事件信息,例如图片点击的x,y坐标。
- 万维网的基本HTTP协议,是一种无状态协议。每一次对网站的网页发出请求,在网站上看起来都是陌生的。
- <%@ Page Language="C#" Trace="true"%> 可以查看调试信息
- 不需要试图状态的控件可以把enableviewstate设置为false;
- asp.net页面中的所有内容都会转换到。net类中,包括HTML和纯文本内容
- 有些时候不可以用id来引用控件,这时可用control类的findcontrol方法
- 一般情况不需要处理load和prerender事件之外的任何事件。这两个事件的区别在于load事件发生在所有控件事件之前,prerender事件发生在所有事件之后
- 调试代码加入debug=“true ”
- ispostback可以认为代表第一次打开页面
- 1、IsPostBack介绍Page.IsPostBack是一个标志:当前请求是否第一次打开。 调用方法为:Page.IsPostBack或者IsPostBack或者this.IsPostBack或者this.Page.IsPostBack,它们都等价。1)当通过IE的地址栏等方式打开一个URL时是第一次打开, 当通过页面的提交按钮或能引起提交的按钮以POST的方式提交的服务器时,页面就不再是第一次打开了。(每点击一次按钮,都是一次加载)2)如果是为响应客户端回发而加载该页,则为 true;否则为 false。
if (IsPostBack)
{
Response.Write("这是回发后的页面!"); //点击button1控件后出现这个
}
else
{
Response.Write("这是首次加载的页面!"); //第一次预览出现这个
}
3).Net判断一个Page是否第一次打开的方法:Request.Form.Count>04)每次页面Load的时候,根据需要把每次都要加载的代码放在IsPostBack中,只需要加载一次的代码放在if(!IsPostBack)中。5)每次用户回传服务器任何信息的时候,都会引发isPostBack属性用来判断此用户是 - 读完第一章
2016年5月18日, 星期三
- 当控件的autopostback属性值为true时 们只要控件的内容发生改变,包含该控件的表单会自动传到服务器端。
- Page.SetFocus(); 可以对控件设置焦点,另外对控件的焦点也可以用控件的focus方法;
2016年5月23日, 星期一
- Button类的onclinetclick()执行按钮所需的任何客户端代码,其实就是javascript代码,实例如下:
<asp:Button ID="Button1"
runat="server"
Text="delete website"
OnClick="Button1_OnClick"
OnClientClick="return confirm('are you sure?')"/>
- button的扩展属性
- 大部分asp.net控件都支持扩展属性,其实就是javascript的属性
- 执行跨页面发送
- PostBackUrl="ButtonSerachResults.aspx"
- PostBackUrl属性代表按钮提交的Post地址
- (TextBox)PreviousPage.FindControl("txtserach") 代表寻找前一个页面的控件
- 善用 PreviousPages属性
public string SearchString{
get {return txtserach.Text;}
}
<asp:label id="txtserach" >
- 这两种方法都可以获得控件引用,一种是弱类型,一种是强类型。
- Button支持click和 command两种事件。不同在于可以传递一个命令和一个参数给command事件,而不能传给click
2016年5月24日, 星期二
- RequiredFieldValidator 必须输入的值
- rangeValidator 必须在范围的值
- compatreValidator 比较一个值和另一个值或执行数据类型检查
- regularExpresValidator 正则表达式值
- CustomValidator 自定义验证
- ValidationSummary 验证错误摘要
- 重要属性
- ControlToValidate: 获取或设置要验证的输入控件。
- ControlToCompare :获取或设置要与所验证的输入控件进行比较的输入控件。
- ErrorMessage: 获取或设置验证失败时 ValidationSummary 控件中显示的错误消息的文本。 (继承自 BaseValidator。)
- Operator 获取或设置要执行的比较操作。
- 使用 Operator 属性指定要执行的比较操作。 下表列出了可能的比较操作。
操作
说明
Equal
所验证的输入控件的值与其他控件的值或常数值之间的相等比较。
NotEqual
所验证的输入控件的值与其他控件的值或常数值之间的不等比较。
GreaterThan
所验证的输入控件的值与其他控件的值或常数值之间的大于比较。
GreaterThanEqual
所验证的输入控件的值与其他控件的值或常数值之间的大于或等于比较。
LessThan
所验证的输入控件的值与其他控件的值或常数值之间的小于比较。
LessThanEqual
所验证的输入控件的值与其他控件的值或常数值之间的小于或等于比较。
DataTypeCheck
输入到所验证的输入控件的值与 BaseCompareValidator. Type 属性指定的数据类型之间的数据类型比较。如果无法将该值转换为指定的数据类型,则验证失败。
使用此运算符时,将忽略 ControlToCompare 和 ValueToCompare 属性。 无法通过主题或样式表主题设置此属性。 有关更多信息,请参见 ThemeableAttribute和 ASP.NET Themes Overview。
- Type :获取或设置在比较之前将所比较的值转换到的数据类型。
- ValueToCompare: 获取或设置一个常数值,该值要与由用户输入到所验证的输入控件中的值进行比较。
- Text 获取或设置验证失败时验证控件中显示的文本。
- Display 获取或设置验证控件中错误消息的显示行为。
使用 Display 属性指定验证控件中错误消息的显示行为。 下表列出了可以使用的不同值。
显示行为
说明
None
验证消息从不内联显示。
Static
在页面布局中分配用于显示验证消息的空间。
Dynamic
如果验证失败,将用于显示验证消息的空间动态添加到页面。
显示行为取决于是否执行客户端验证。 如果客户端验证不是活动的(由于浏览器不支持它或者由于已使用 Page. ClientTarget 页指令或 EnableClientScript 属性将其禁用),则 ValidatorDisplay.Static和 ValidatorDisplay.Dynamic 的行为相同:错误消息仅在显示时才占用空间。 在错误消息不显示 (ValidatorDisplay.Dynamic) 时为其动态分配空间的功能只对客户端验证适用。
- EnableClientScripts属性设置为False可以禁用它的客户端验证。
- 应该总是检查Page.isValid属性,如果没有验证错误,则为true。
<asp:RequiredFieldValidator
ID="RequiredFieldValidator1"
Text="<img src='error.gif' alt='must enter'"
runat="server"
ErrorMessage="RequiredFieldValidator">
</asp:RequiredFieldValidator>
- Page.Validators 属性突出显示每一个有验证错误的控件
- 如果一个页面有两个验证表单,需要使用验证组属性
- ValidationGroup="" 可以赋予任意字符串,字符串的唯一目的就是把表单中不同控件关联到一起并划分
- 所有的按钮控件,都有禁用验证控件,causes-validation属性。如果赋予False值,这个按钮会绕过页面中所有验证。绕过验证对创建取消按钮很有用。
- RequiredFieldValidator. InitialValue 属性:获取或设置关联的输入控件的初始值。仅当关联的输入控件在失去焦点时的值与此 InitialValue 匹配时,验证才失败
·RangeValidator控件必须设置5个属性
- ControlToValidate
- Text
- MinValue
- MaxValue
- Type
·CompareValidator控件执行三种不同类型的验证任务。
- 是否在表单输入类型正确的值
- 可以和一个固定值作比较
- 可以比较一个表单字段和另一个表单字段的值,例如检查会议的开始时间和结束时间
- 有6个重要属性
- ControlToValidate
- Text
- Type
- Operator
- ValueToCompare
- ControlToCompare
- ControlToValidate
- CustomValidator控件用于自定义验证控件
- ClientValidationFunction:用于执行客户端验证的函数名
- 事件-ServerValidate:CustomValidator执行验证时引发该事件
- 自动属性的初始值
private int _maximumLength = 0;
public int MaximumLength
{
get { return _maximumLength; }
set { _maximumLength = value; }
}
public int MaximumLength { get; set; } = 0;
- asp。net中需要的代码文件,需要把该类添加到应用程序的APP_Code文件夹中(方法是右击App_Code文件夹并选择添加新项)。所有加入到这个特殊文件夹的类都会自动被ASP.NET编译
2016年5月31日, 星期二
- 数据访问概述
- BulletedList 列表框,可以显示为文本,按钮
- CheckBoxList1
- DropDownList1
- ListBox1
- RadioButtonList1
- 使用以上5个控件如果指定Datasource属性就会自动绑定,还要配置 DataTextField="title" DataValueField="title" 属性
- 这就是上面控件的实例;
- 使用以下控件可以一次显示一组数据记录
- DataList
- GridView
- Repeater
- Listview
- 以上就是实例
2016年6月1日, 星期三
- 不同的dataSource控件使用不同的asp.net参数;对于sqldatsource而言,参数就是ADO.Net参数.也就是sql语句
- 对于ObjectDataSource控件,参数时方法参数,这些时业务对象方法的参数.
- AccessDataSource ,
SqlDataSource ,
LinqDataSource ,
ObjectDataSource 控件都支持以下的参数对象
- Parameter--表示任意静态值
- ControlParam--表示控件值或页面的属性值
- CookieParam--表示浏览器的Cooki值
- FormParameter--表示HTML表单字段的值
- ProfileParameter--表示配置文件的属性值
- QueryStringParameter--表示查询字符串字段的值
- SessionParameter--表示存储在回话状态的值
- 见下代码
<div>
<asp:DropDownList ID="ddlMoviesCateGory"
DataSourceID="SrcMoviesCategories"
DataTextField="Name"
DataValueField="id"
runat="server"></asp:DropDownList>
<asp:GridView ID="GridView1" runat="server" DataSourceID="SrcMovies">
<Columns>
<asp:CheckBoxField />
</Columns>
</asp:GridView>
<asp:Button ID="Button1" runat="server" Text="Button" />
<asp:SqlDataSource ID="SrcMoviesCategories"
ConnectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|MyDatabase.mdf;Integrated Security=True"
SelectCommand="Select id, name from MovieCategories "
runat="server"></asp:SqlDataSource>
<asp:SqlDataSource id="SrcMovies"
ConnectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|MyDatabase.mdf;Integrated Security=True"
SelectCommand="select title,director from Movies where Categoryid=@id"
runat="server">
<SelectParameters>
<asp:ControlParameter Name="id" Type="Int32" ControlID="ddlMoviesCateGory" />
</SelectParameters>
</asp:SqlDataSource>
</div>
- ControlParameter 就是所谓的控件参数.Controlid对应的就是表示值的控件,name=id代表是哪个参数,如改成title,就是@title
- 下面讲解编程式数据绑定
- 每个控件都有DataSource属性和DataBind方法.通过使用这个属性和方法,也可以通过编程方式将DataBound控件和数据源绑定
if (Page.IsPostBack)
{
InstalledFontCollection fonts=new InstalledFontCollection();
GridView1.DataSource = fonts.Families;
GridView1.DataBind();
}
上面的代码用来显示系统的所有字体- 当调用DataBind()方法时,GridView控件从数据源获取数据,并进行迭代以获取所有项,同时也显示所有项,如果不调用DataBind方法,控件不显示任何内容;
- 不能同时使用声明式数据绑定和编程式数据绑定,如果同时尝试使用DataSource和DataSourceID属性,会引发异常
- 可以显式调用DataBind方法,在需要刷新绑定的数据时,显式调用很有用
2016年6月2日, 星期四
- 数据绑定表达式是一种特殊的表达式,它直到运行时再能得到结果
- 表达式包含在<% #%>之间
- 数据绑定表达式在控件的DataBinding事件触发时才开始计算值
- 使用声明式绑定DataSource时,表达式自动触发
- 编程式绑定时调用DataBind()时触发
- Eval()时Page类的保护方法.其实是调用的DataBinder.Eval()方法
- 下面的例子是自定义的的方法在绑定表达式中应用.
<script runat="server">
public string FormatTitle(Object title)
{
return "<b>" + title.ToString().ToUpper() + "</b>";
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Format Movie Titles</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Repeater
id="Repeater1"
DataSourceId="srcMovies"
Runat="server">
<ItemTemplate>
<%# FormatTitle(Eval("Title")) %>
<hr />
</ItemTemplate>
</asp:Repeater>
- 双向数据绑定表达式--就是text里绑定数据库的字段,然后可以更新,
- 使用Bind()来显示数据项的值.先看下面代码吧
<asp:FormView ID="FormView1" runat="server" AllowPaging="True" DataKeyNames="Id" DataSourceID="SqlDataSource1">
<EditItemTemplate>
Id:
<asp:Label ID="IdLabel1" runat="server" Text='<%# Eval("Id") %>' />
<br />
Title:
<asp:TextBox ID="TitleTextBox" runat="server" Text='<%# Bind("Title") %>' />
<br />
Director:
<asp:TextBox ID="DirectorTextBox" runat="server" Text='<%# Bind("Director") %>' />
<br />
DateReleased:
<asp:TextBox ID="DateReleasedTextBox" runat="server" Text='<%# Bind("DateReleased") %>' />
<br />
<asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" CommandName="Update" Text="更新" />
<asp:LinkButton ID="UpdateCancelButton" runat="server" CausesValidation="False" CommandName="Cancel" Text="取消" />
</EditItemTemplate>
<InsertItemTemplate>
Title:
<asp:TextBox ID="TitleTextBox" runat="server" Text='<%# Bind("Title") %>' />
<br />
Director:
<asp:TextBox ID="DirectorTextBox" runat="server" Text='<%# Bind("Director") %>' />
<br />
DateReleased:
<asp:TextBox ID="DateReleasedTextBox" runat="server" Text='<%# Bind("DateReleased") %>' />
<br />
<asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True" CommandName="Insert" Text="插入" />
<asp:LinkButton ID="InsertCancelButton" runat="server" CausesValidation="False" CommandName="Cancel" Text="取消" />
</InsertItemTemplate>
<ItemTemplate>
Id:
<asp:Label ID="IdLabel" runat="server" Text='<%# Eval("Id") %>' />
<br />
Title:
<asp:Label ID="TitleLabel" runat="server" Text='<%# Bind("Title") %>' />
<br />
Director:
<asp:Label ID="DirectorLabel" runat="server" Text='<%# Bind("Director") %>' />
<br />
DateReleased:
<asp:Label ID="DateReleasedLabel" runat="server" Text='<%# Bind("DateReleased") %>' />
<br />
<asp:LinkButton ID="EditButton" runat="server" CausesValidation="False" CommandName="Edit" Text="编辑" />
</ItemTemplate>
</asp:FormView>
</div>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:MyDataConnectionString %>" SelectCommand="SELECT Id, Title, Director, DateReleased FROM Movies" UpdateCommand="UPDATE Movies SET Title = @title, Director = @director WHERE (Id = @id)">
<UpdateParameters>
<asp:Parameter Name="title" />
<asp:Parameter Name="director" />
<asp:Parameter Name="id" />
</UpdateParameters>
</asp:SqlDataSource>
- 可以看出,双向绑定更新需要几部
- 设置数据源的UpdateCommand,然后设置@参数
- 设置数据绑定控件的模板,例如设置insert模板,edit模板等等,然后使用bind()方法绑定函数
- 其实这些用设计界面更方便,真是妥妥拽拽啊
2016年6月3日, 星期五
- SqlConnectionStringBuilder 工具类可以把连接字符串转换成为标准形式
- web.config可以加密.最简单的方式是使用aspnet_regiis工具
2016年6月5日, 星期日
-
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:MyDataConnectionString %>"
SelectCommand="SELECT Id, Title, Director, DateReleased FROM Movies"
FilterExpression="Title like '{0}%'">
<FilterParameters>
<asp:ControlParameter ControlID="TextBox1" Name="title"/>
</FilterParameters>
- FilterExpression和FilterParameters配合使用可以过滤SQLDataSource的信息.ControlID是包含参数的控件ID
- SqlDataSource的 数据源模型分为两种DataSet和DataReader,默认情况是DataSet.
- 如果只是快速的查看数据,可以用DataReader
- SqlDataSource控件中可以使用以下ASP.NET参数
- Parameter--表示任意静态值
- ControlParam--表示控件值或页面的属性值
- CookieParam--表示浏览器的Cooki值
- FormParameter--表示HTML表单字段的值
- ProfileParameter--表示配置文件的属性值
- QueryStringParameter--表示查询字符串字段的值
- SessionParameter--表示存储在回话状态的值,
- 这还包含5个ASP.NET参数集,selectParameter,insertparameter,deleteparameter,Updateparameter,filterparameter下面依次介绍几个参数
- 使用asp.net参数对象-属性讲解
- Direction可以使input,output,inputoutput,returnValue
- name参数的名称
- size参数的数据大小
- type参数的类型
- controParams表示一个控件的属性值,实际上可以表示任意一个和SqlDataSource在同一页面的控件的值
- cookieparameters除了上述的属性外,还有cookieName属性--浏览器cookie的名称
- QueryStringParameter主要用于构造主从页面
- 通过程序执行SqlDataSource命令
- 如果希望直接处理ADO参数对象,例如,在执行命令前通过程序增加额外的ADO参数
- 例如SqlDataSource控件执行命令前添加当前用户的用户名ID
<asp:SqlDataSource
id="srcGuestBook"
SelectCommand="SELECT Name,Comments,EntryDate
FROM GuestBook ORDER BY Id DESC"InsertCommand="INSERT GuestBook (Name,Comments)
VALUES (@Name,@Comments)"ConnectionString="<%$ ConnectionStrings:GuestBook %>"
Runat="server" OnInserting="srcGuestBook_Inserting" />
<script runat="server">
protected void srcGuestBook_Inserting(object sender, SqlDataSourceCommandEventArgs e)
{
e.Command.Parameters.Add(new SqlParameter("@Name", User.Identity.Name));
}
</script>
- SqlDataSource可以直接执行命令,update和delete同理
<asp:SqlDataSource
id="srcGuestBook"
ConnectionString="<%$ ConnectionStrings:GuestBook %>"
SelectCommand="SELECT Name,Comments FROM GuestBook
ORDER BY Id DESC"InsertCommand="INSERT GuestBook (Name,Comments)
VALUES (@Name,@Comments)"Runat="server">
<InsertParameters>
<asp:Parameter Name="Name" />
<asp:Parameter Name="Comments" />
</InsertParameters>
</asp:SqlDataSource>
<asp:Button id="btnAddEntry" Text="Add Entry" Runat="server" OnClick="btnAddEntry_Click" />
protected void btnAddEntry_Click(object sender, EventArgs e)
{
srcGuestBook.InsertParameters["Name"].DefaultValue = txtName.Text;
srcGuestBook.InsertParameters["Comments"].DefaultValue = txtComments.Text;
srcGuestBook.Insert();
}
- SqlDataSource的事件
- deleted在执行delete命令后触发,同理还有inserted,selected,Updated.通常用来做错误处理程序,因为这些事件接受一个Eventargs参数,参数里包含任何异常
- deleting在执行删除命令之前触发,同理还有inserting,selecting,updating,和filtering(在过滤之前触发)