一.ASP.NET回送
1.只有进行回送时,才在服务器上触发事件。
即,文本框中的值改变时,TextChanged事件不会立即触发,只有单击Submit按钮,提交了窗体,并发送给服务器,才会触发TextChanged事件。
(如果希望把更改事件立即传送给服务器(例如,改变了DropDownList的选项),可以把AutoPostback属性设置为true。
这样就会使用客户端的JavaScript把窗体数据立即提交给服务器。当然,网络通信量也会增加。使用这个功能时要小心。)
页面返回给服务器后,比较控件的新值和旧值是由View State完成的。
2.示例,在同一个页面显示结果
A.在VS中打开上一篇文章里建立的web程序EventRegistrationWeb
B.给web页面Registration.aspx添加一个标签labelResult,清空这个标签的text属性
C.双击submit按钮,添加click事件,在Registration.aspx.cs文件中添加代码如下
protected void buttonSubmit_Click(object sender, EventArgs e)
{
string selectedEvent = dropDownListEvents.SelectedValue;
string firstName = textFirstName.Text;
string lastName = textLastName.Text;
string email = textEmail.Text;
labelResult.Text = String.Format("{0} {1} selected the event {2}",
firstName, lastName, selectedEvent);
}
D.debug→start without debugging,运行结果如下
3.示例,在第二个页面显示结果
A.创建新的item,webform,命名为ResultsPage.aspx
B.给ResultsPage添加一个标签labelResult
C.给ResultsPage类的Page_Load方法添加代码
D.把Registration.aspx页面上Submit按钮的PostbackUrl属性设置为ResultsPage.aspx
E.删除Submit按钮的Click事件处理程序,因为不再需要它了
F.启动Registration.aspx页面,输入一些数据,单击Submit按钮,就会重定向到ResultsPage.aspx页面,其中显示了输入的数据。
(结果没有出来,可能是FindControl()方法不能使用)
4.示例,创建强类型化的previouspage
A.project→add new class,为项目添加一个新类,命名为RegistrationInfo
B.给RegistrationInfo添加代码
C.在Registration.aspx.cs文件中给Registration的类添加公共属性RegistrationInfo,所以是添加到类class里面
D.在ResultPage.aspx文件的Page指令下面添加PreviousPageType指令
E.在ResultsPage类的Page_Load()方法中,代码可以简化为
F.运行
(结果没有出来)
二.ASP.NET AJAX回送
1.在一般的ASP.NET回送中,会请求整个页面。为了减少网络上的传输量,可以使用ASP.NET Ajax回送。
在Ajax回送中,只使用JavaScript返回并刷新页面的一部分,使用UpdatePanel可以方便地做到这一点。
2.示例,使用UpdatePanel控件
A.在VS中打开EventRegistrationWeb
B.添加一个新AJAX Web窗体UpdatePanelDemo.aspx
C.在工具箱的AJAX Extensions类别中,给页面添一个UpdatePanel控件
D.在UpdatePanel控件内部添加一个标签和一个按钮,在UpdatePanel控件外部再添加一个标签和一个按钮
把UpdatePanel控件内部和外部的按钮的Text属性分别设置为AJAX Postback和ASP.NET Postback
E.给两个按钮指定click事件添加代码
F.启动应用程序,单击两个按钮。单击AJAX Postback按钮仅刷新第一个标签。单击ASP.NET Postback会刷新整个页面
(结果没有出来)
三.输入的有效性验证
1.在用户输入数据时,应检查数据是否有效,检查可以在客户端和服务器上进行。
在客户端上检查数据可以使用JavaScript来进行。但是,如果使用JavaScript在客户端检查数据,就一定要在服务器上也进行检查,因为客户端是永远不能完全信任的。
在服务器上检查数据是绝对必须的。在客户端上检查数据还能提供更好的性能,因为在客户端上验证完数据之前,不需要把数据发送到服务器上。
在ASP.NET中,不需要自己编写验证函数。许多已有的验证控件能进行客户端和服务器验证。
2.所有的验证控件都有ErrorMessage和ControlToValidate属性。
ErrorMessage可以定义显示的消息。ControlToValidate对输入进行检查。
<asp:TextBox ID="textFirstname" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ErrorMessage="Enter your first name"ControlToValidate="textFirstName">
</asp:RequiredFieldValidator>
3.以下为所有的验证控件
4.示例,检查输入的电子邮件地址
A.打开之前创建的项目EventRegistrationWeb
B.打开之前创建的文件Registration.aspx
C.选择表格右边的列,任意一个格子,右键,insert→column to the right,添加一个新列
D.添加3 个RequiredFieldValidator控件和1个RegularExpressionValidator控件
E.按照下表配置验证控件
F.其中的ValidationExpression,可以在其后的...中添加
G.把以下代码添加到ResultsPage类的Page_Load()方法中
protected void Page_Load(object sender, EventArgs e)
{
try
{
if (!PreviousPage.IsValid)
{
labelResult.Text = "Error in previous page";
return;
}
//...
H.运行程序