Web 编程基础
Web应用程序会让Web服务器给客户机发送HTML代码
ASP.NET技术可用于动态创建带有服务器端代码的Web页面
?
ASP.NET 运行库
使用ASP.NET在客户系统上创建Web应用程序,只需要浏览器不需要安装。NET
在服务器系统上,需要ASP.NET运行库
?
创建简单的Web页面
下面是一些主要Web服务器控件,以及返回的HTML代码
服务器控件?HTML
Label<span>
Literalstatic text
TextBox<input type="text">
Button<input type= "submit">
LinkButton?<a href="javascript: __dopostback()>
ImageButton?<input type="image">
HyperLink?<a>
DropDownList?<select>
ListBox<select size="">
CheckBox?<input type= "checkbox">
RadioButton?<input type="radio">
Image<img src="">
Calendar?<table>
TreeView?<div><table>
?
事件处理程序
可以添加事件处理程序,在服务器上给Web服务器控件调用
例如Button控件可以包含Click事件
只有进行回送时,才在服务器上触发事件
用控件的新值来验证其旧值是由ViewState完成的
ViewState是一个隐藏字段,会同页面内容一起发送给浏览器
页面发送给客户端时,ViewState包含与窗体中控件相同的值
给服务器回送时,ViewState会和新值一起发送给服务器,用来验证值是否改变和其他处理
Button控件属性PostbackUrl,定义了从当前页发送到的网页的URL
例如:
<asp:Button ID="Button1" runat="server" Text="Button" PostBackUrl="——/1.aspx" />
目标页的Page类的属性PreviousPage,会返回一个Page对象
使用PreviousPage的FindControl()方法来访问源页面的控件
例如:
Label1.Text = ((TextBox)PreviousPage.FindControl("TextBox1"))。Text;
由于FindControl()方法返回的是一个Control对象,所以要强制转换
?
输入的有效性验证
使用ASP.NET的验证控件,能进行客户端和服务器检查
所有验证控件:
RequiredFieldValidator
计算输入控件的值以确保用户输入值
当验证执行时,如果输入控件包含的值仍为初始值而未更改,则该输入控件验证失败
默认情况下,初始值为空字符串 (""),这指示必须在输入控件中输入值方可通过验证
RangeValidator
计算输入控件的值,以确定该值是否在指定的上限与下限之间
可以检查数字对、字母对和日期对限定的范围
RegularExpressionValidator
计算输入控件的值,以确定该值是否与某个正则表达式所定义的模式相匹配
通过这种类型的验证,可以检查可预知的字符序列,如电子邮件地址
CompareValidator
将输入控件的值同常数值或其他输入控件的值相比较,以确定这两个值是否与由比较运算符(小于、等于、大于等等)指定的关系相匹配
CustomValidator
计算输入控件的值以确定它是否通过自定义的验证逻辑
可以创建服务器端验证函数,请为执行验证事件提供处理程序
ValidationSummary
显示 Web 页上所有验证错误的列表
?
状态管理
有几种方式可以把一些客户端信息从一个页面传送给另一个页面
它们主要区别是:状态是存储在客户端还是服务器上
状态类型?存储说明
ViewState?客户端只在一个页面中
Cookie客户端
Session服务器会话状态
Application?服务器应用程序状态在所有客户端上共享
Cache服务器高速缓存
客户端的状态管理
ViewState
服务器通过ViewState来判断初始值和新值是否有区别,来判断值是否有修改
缺点是这样增加了网络流量
可以在Page指令中把EnableViewState属性设置为false来关闭它
可以通过设置控件的EnableViewState属性来配置控件的ViewState值
而且控件的EnableViewState配置优先级高于页面的配置
可以使用索引符自定义一个ViewState值
例如:
定义一个ViewState值:
ViewState["mydata"] = "my data";
读取存储的ViewState值:
string mydata = (string)ViewState["mydata"];
在发送给客户端的HTML代码中,ViewState储存在一个隐藏的字段中
ViewState只能保存到一个页面中
cookie
cookie在HTTP头中定义,使用HttpResponse类可以把cookie发送给客户端
Response是Page类的一个属性,返回一个HttpResponse类型的对象
HttpResponse类定义了返回HttpCookieCollection的Cookies属性
使用HttpCookieCollection可以给客户端返回多个cookie
例如:
HttpCookie cookie = new HttpCookie("mycookie");
cookie.Values.Add("mystate", "myval");
cookie.Expires = DateTime.Now.AddMonths(3);
Response.Cookies.Add(cookie);
说明:
创建并命名新的Cookie
向Cookie添加键值
通过Expires属性获取或设置Cookie的过期日期和时间
使用Response发送这个Cookie
通过访问HttpRequest对象中的cookie集合读取cookie
例如:
HttpCookie cookie = Request.Cookies["mycookie"];
string myval = cookie.Values["mystate"];
服务器端的状态管理
使用客户端状态的缺点是增加了数据在网络之间的传送
使用服务器状态的缺点是服务器必须给其客户端分配资源
Session
可以在Global Application类中定义在会话开始或结束时运行的代码
在新的Global Application类中会创建global.asax文件
在Session_Start()事件处理程序中,可以初始化会话变量
例如:
void Session_Start(Object sender, EventArgs e) {
? // Code that runs on application startup
? Session["mydata"] = 0;
}
Session可以存储在HttpSessionState对象中
使用Page类的Session属性来访问和设置
例如:
int val = (int)Session["mydata"];
val += 4;
Session["mydata"] = val;
Application
使用应用程序状态可以使数据在多个客户端共享
通过Page类的Application属性访问它
可以在global.asax文件的Application_Start()事件处理中初始化Application变量
例如:
void Application_Start(Object sender, EventArgs e) {
? // Code that runs on application startup
? Application["userCount"] = 0;
}
在改变Application变量之前,由于多个用户可以同时访问,必须用Lock()方法锁定
在修改变量之后必须用Unlock()方法,而且锁定和解锁之间要非常短
例如:
void Session_Start(Object sender, EventArgs e)
{
? // Code that runs when a new session is started
? Application.Lock();
? Application["userCount"] = (int)Application["userCount"] + 1;
? Application.UnLock();
}
读取Application中的数据:
Label1.Text = Application["userCount"].ToString();
不应该在Application中储存太多数据
Cache
高速缓存(Cache)是服务器端状态,在所有客户端上共享
不同于Application,Cache有多种方式定义状态何时失效
例如:
给Cache添加对象:
Cache.Add("mycache", myobj, null, DateTime.MaxValue, TimeSpan.FromMinutes(10), CacheItemPriority.Normal, null);
参数:
key?用于引用该项的缓存键
value?要添加到缓存的项
dependencies?该项的文件依赖项或缓存键依赖项
当任何依赖项更改时,该对象从缓存中移除。如果没有依赖项,则此参数包含空引用
absoluteExpiration?所添加对象将过期并被从缓存中移除的时间
如果使用可调过期,则 absoluteExpiration 参数必须为 NoAbsoluteExpiration。
slidingExpiration?最后一次访问所添加对象时与该对象过期时之间的时间间隔
如果该值等效于20分钟,则对象在最后一次被访问20分钟之后将过期并从缓存中移除。
如果使用绝对过期,则 slidingExpiration 参数必须为 NoSlidingExpiration。
priority?定义了高速缓存的优先级,由 CacheItemPriority 枚举表示
在删除高速缓存项时,优先级较低的项先删除
onRemoveCallback?在从缓存中移除对象时所调用的委托
当从缓存中删除应用程序的对象时,可使用它来通知应用程序。
返回值
如果该项先前存储在Cache中,则为Object,否则为null
当返回的对象不是null时,就可以进行类型转换,并用于储存高速缓存项
例如:
object o = Cache["mycache"];
if (o == null)
{
? // Reload the cache.
}
else
{
? // Use the cache.
? MyClass myObj = (MyClass)o;
? //…
}
?
身份验证和授权
对于Web应用程序,最常用的身份验证技术是Forms身份验证
安全控件 --> Membership API --> 成员提供程序
身份验证的配置
使用安全控件
安全控件说明
Login?复合控件,创建使用户登录网站的界面
LoginStatus根据用户是否登录,并切换某个链接的状态
LoginName在网页上显示经过身份验证的用户的名称
LoginView根据指定用户的身份验证状态使用模板显示不同的内容
PasswordRecovery?复合控件,创建使用户重新设置密码的界面
ChangePassword复合控件,创建使用户可以更改其网站密码的界面
CreateUserWizard?一个向导,创建新用户,把信息写入
使用Login控件
添加一个Login控件,可以看到源码是:
<asp:Login ID="Login1" runat="server"></asp:Login>
可以使用DisplayRememberMe属性来设置是否显示复选框使用户可以控制是否发送Cookie
为了可以编辑样式,可以选择智能标记选择“转换为模板”来编辑
使用CreateUserWizard控件
CreateUserWizard控件是一个向导,其步骤可以在设计器中配置
控件的智能标记可以分别配置每个步骤
?
读写SQL Server数据库
在服务器资源管理器中,可以添加数据库连接或者添加新的数据库
显示数据
利用数据控件可以显示、编辑数据
数据控件包括:数据视图和数据源控件
数据源控件与数据源关联在一起,数据视图与数据源连接来表示数据
数据控件?说明
GridView?用行和列来显示数据
DataList?在一列显示所有的项
DetailsView?用于显示单个记录,一行表示一个字段,通常与GridView组合使用
FormView?显示数据源中的一行
Repeater?为数据源中的每个项重复相应布局
数据源控件说明
SqlDataSource访问位于关系数据库中的数据
AccessDataSource?表示一个使用Access数据库的数据源控件
ObjectDataSource?允许把。NET类用作数据源
XmlDataSource控件使得XML数据可用于数据绑定控件
SiteMapDataSource?使用XML文件定义站点结构,创建到该网站的链接和引用?
如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h59891.shtml