《C#入门经典》学习笔记(Web 编程基础)

来源:互联网 发布:java增删改查实例项目 编辑:程序博客网 时间:2024/04/27 16:28

Web 编程基础

Web应用程序会让Web服务器给客户机发送HTML代码
ASP.NET技术可用于动态创建带有服务器端代码的Web页面

 

ASP.NET 运行库

使用ASP.NET在客户系统上创建Web应用程序,只需要浏览器不需要安装.NET
在服务器系统上,需要ASP.NET运行库

 

创建简单的Web页面

下面是一些主要Web服务器控件,以及返回的HTML代码

服务器控件 HTML
Label  <span>
Literal  static 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文件定义站点结构,创建到该网站的链接和引用 

原创粉丝点击