一.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.運行程序