Mặc dù ta tạo các Web Form từ các thành phần riêng rẽ, chúng tạo nên một khối thống nhất. Khi Web form đợc biên dịch, ASP .NET phân tích trang và mã của chúng, tạo ra một lớp mới, và sau đó biên dịch mới lớp nàỵ Lớp tạo ra đợc bắt nguồn từ lớp ASP.NET Page, nhng có thêm các thành phần mở rộng với các control, mã lệnh, văn bản HTML tĩnh trong file .aspx.
Lớp trang mới này trở thành một file có thể thi hành và đợc thi hành ở phía server mỗi khi trang Web Form đợc yêu cầụ Trong khi thực thi, lớp Page xử lý các yêu cầu gửi đến và phản hồi bằng cách tạo ra mã HTML một cách động và gửi nó tới browser. Nếu trang có chứa các control (thông thờng là nh vậy) thì lớp Page hoạt động nh một lớp chứa các control và ánh xạ các các control đợc tạo tại thời điểm thực thi, cũng nh vậy sinh ra các mã HTML. Điều này hoàn toàn khác với
ASP. Trong ASP, trang bao gồm mã HTML tĩnh đặt rải rác với mã thực thị Bộ xử lý của ASP đọc trang rút ra và chạy các mã lệnh (thông dịch hơn là biên dịch) sau đó đặt kết quả trở lại mã HTML tĩnh trớc khi gửi tới trình duyệt.
Tóm lại toàn bộ Web form, theo hiệu quả nào đấy, là một chơng trình đa ra mã HTML. Mô hình xử lý giống nh bất kỳ các thành phần có thể gọi nào trong trang đợc thi hành khi có triệu gọị
Bởi vì file .aspx không phải là các module theo kiểu truyền thống, mối quan hệ của nó với file lớp đợc thành lập với các chỉ thị ở ở đầu trang. Đặc biệt là thuộc tính thừa kế trong chỉ thị @Page đợc sử dụng để chỉ định lớp file mà file .aspx có nguồn gốc.
<%@ Page Inherits= Project1.WebPage1 %>” ” … 2.4.5 Quá trình xử lý của trang Web form
Bộ khung Web form thực hiện rất nhiều dịch vụ cho ứng dụng Web của tạ ví dụ bộ khung Web Form có thể nắm bắt các thông tin có liên quan và là cho nó có giá trị trong thuộc tính của các đối tợng.
Để lập trình Web Form một cách có hiệu quả ta cần biết về các sự kiện tuần tự xảy ra khi trang Web Form đợc xử lý.
Vòng đời của một trang Web Form Round trip
Một trong những điều quan trọng để hiểu đợc quá trình xử lý trong trang Web Form là về sụ phân chia hoạt động trong Web Form. Browser hiển thị Form tới ngơừi dùng và ngời dùng tơng tác với form. Tuy nhiên tất cả quá trình xử lý mà có sự tơng tác với các thành phần phía server phải xảy ra trên server. Điều này có nghĩa là form phải đợc post lên server, xử lý và trả về trình duyệt. Sự tuần tự này đợc gọi là round trip.
Mặc dù ta có thể tạo môt số script hữu ích ở phía client trong trang Web Form nh để kiểm tra dữ liệu nhập vào cho một số UI, nhng các script này không thể tơng tác với các thành phần ở phiá server.
Trong Web form, hầu hết các hành động của ngời dùng nh là click một button kết quả trả về trong một round trip. Vì lý do này các sự kiện có sẵn trong server control đều có giới hạn. Hầu hết các server control chỉ lộ ra sự kiện click, chúng không đa ra các sự kiện xảy ra thờng xuyên nh mouseonover vì mỗi lần sự kiện xảy ra nó cần một round trip để xử lý. Chúng không đa ra các sự kiện xảy ra thờng xuyên nh mouseonover, vì mỗi lần sự kiện xảy ra nó cần một round trip khác tới server, nó chiếm một thời gian đáng kể.
Sự tạo lại trang
Trong bất kỳ kiểu xử lý Web nào, các trang đợc tạo từ đầu trong mỗi round trip. Khi sevver kết thúc quá trình xử lý trang nó gửi tới browser và bỏ đi các thông tin về trang đó. Lần kế tiếp khi trang đợc post lên server, server bắt đầu lại toàn bộ trang và xử lý.Vì vậy, Web pages thờng đợc nói là sự phi trạng thái, giá trị các biến trong trang và control không đợc bảo quản trên server.
Trong các ứng dụng truyền thống, thông tin mà server có đợc là những thông tin mà ngời dùng điền vào các control, bởi vì thông tin đợc gửi tới server khi post các form. Các thông tin khác, nh giá trị của biến hay các thuộc tính thiết lập đều bị bỏ quạ
Bộ khung Web Form giải quyết các giới hạn này theo một vài cách. đầu tiên nó ghi lại trang thái và các thuộc tính của control giữa các round trip. Sau đó nó cung cấp các tiện ích quản lý trạng thái để trả lại các thông tin cụ thể trong ứng dụng (không chỉ là giá trị của các control) giữa các round trip hay khi qua lại giữa các trang.
Trong quá trình xử lý,Web form qua mỗi số chặng khác nhaụMỗi chặng bộ xử lý Web form gọi trang có liên quan xử lý các phơng thức và chạy mã lệnh trong phơng thức đó.
Page_Init
Sau sự kiện này , trang đợc khởi tạọ Sự kiện này chịu trách nhiệm cho tất cả các hoạt động khởi tạọ Nếu ta muốn khởi tạo các giá trị một vài biến .. trớc khi nạp trang, ta khai báo nó trong sự kiện Page_Init.
Page_load
Sự kiên tự động chạy mỗi khi trang đợc nạp. nó xảy ra trớc tiên trong một yêu cầu trang sau khi các control đã đợc khởi tạọ
Change events
Sau sự kiện Page_Load, là các sự kiện của các control đặc biệt. Ví dụ nh các control có sự kiện Change hay thậm chí sự kiện click.
Mặc định, chỉ sự kiện click mới submit một form lên server. Sự kiện Change đợc lu lại trong hàng đợi chỉ đợc xử lý sau khi form đợc post lên server bằng một sự kiện click.
Click event.
Tạo ra việc post form lên server đợc xử lý sau khi tất cả sự kiện Change đã đ- ợc xử lý.
Page_Unload
Là sự kiện cuối cùng trớc khi trang bị huỷ bỏ, sự kện sảy ra khi ngời dung yêu cầu tới một trang khác. Ta không thể đọc các giá trị của control trong phơng thức của sự kiện này vì các control không còn tồn tại lâu nữạ Page_Unload rất hữu dụng cho các hoạt động làm sạch nh đóng lại các file, đăng nhập, đóng lại CSDL, và huỷ các đối tợng.
Sự kiện trong Web Form thờng khác với các sự kiện trong form client truyền thống hay các ứng dụng web thuần client.
Trong các ứng dụng thuần client, các sự kiện phát sinh và đợc nắm bắt bởi clien. Trong Web Form hầu hết các sự kiện phát sinh ở phía client và đợc nắm bắt ở phía server. Trong các sự kiện phát sinh ở phía client, mô hình sự kiện Web Form cần thông tin đợc nắm bắt ở phía client và thông điệp về sự kiện đợc chuyển tới server. Vì cách làm việc của Web, thông điệp này phải đợc post qua HTTP. Bộ khung Web Form phải thông dịch thông tin này để xác định sự kiện nào đã phát sinh, và sau đó gọi phơng thức tơng ứng trong mã lệnh để nắm bắt sự kiện.
Sự kiện Postback và Non_Postback
Trong các control của Asp (không phải của HTML) mặc định chỉ sự kiện button_click() trong form xảy ra thì post thông tin tới server. Sự kiện change trong control của ASP.NET đợc nắm bắt nhng không post ngay lập tức. Thay vào đó chúng đợc cache cho tới khi post xảy rạ Sau khi trang đợc xử lý trên server tất cả các sự kiện đợc xử lý lần lợt.
Trong khi trang đợc xử lý trên server, tất cả các sự kiện change đợc xử lý tr- ớc, sau đó sự kiện click gây ra việc post form đợc thực hiện.
Ta có thể đặt sự kiện change để có thể post form ngay lập tức bằng thuộc tính Autopostback=”True” mà không cần đợi sự kiện click.
Các server control trong ASP.NET chỉ cung cấp các sự kiện ở phía client. Tuy nhiên các sự kiện trong bộ HTML server control ( button và textbox) cho phép ta tạo các sự kiện có thể đợc nắm bắt ở cả hai phía client và server. Giống nh các sự kiện trong control của Asp.NET, sự kiện phía server của các control HTML thờng bị giới hạn trong sự kiện đơn nh click hay changẹ Các sự còn lại thờng cho ta dùng trong client script.
2.4.8 Các sự kiện Application và Session
Ngoài các sự kiện trong trang và các sự kiện trong các control, bộ khung ASP.NET còn cung cấp các sự kiện ở mức độ cao hơn:
Application. Sự kiện ApplicationStart() xảy ra khi ứng dụng Web của ta lần đầu tiên đợc bắt đầụ Điều này cho phép ta khởi tạo các nguồn tài nguyên
đợc sử dụng trong suốt thời gian hoạt động của ứng dụng. Một sự kiện tơng đơng với nó, ApplicationEnd() hữu ích để ta đóng lại các tài nguyên đã sử dụng.
Session. Các sự kiện Session cũng giống nh Application (SessionStart và SesstionEnd) nhng phát sinh với mỗi session duy nhất trong ứng dụng. (Một session bắt đầu khi một ngời dùng yêu cầu đến một trang lần đầu tiên trong ứng dụng của ta và kết thúc khi ứng dụng của ta đóng phiên kết nối hay khi các phiên kết nối hết thời hạn).
Để tạo phơng thức sự kiện theo cú pháp ASP.NET Trong các thành phần server control, chỉ cần gắn một phơng thức cho tên một sự kiện:
<asp:Button id="Button1" runat="SERVER" OnClick="MyMethod" /> Sau đó tạo phơng thức để nắm bắt sự kiện đó trong mã lệnh của tạ Phơng thức có dạng nh sau:
[Visual Basic]
Private Sub methodname(ByVal sender As Object, ByVal e as
EventArgs) Ví dụ: [C] <%@ Page Language="C" %> <%@ Import Namespace="System.Collections" %> <HTML> <HEAD>
protected void Button1_Click(object Source, EventArgs e){ Label1.Text="You clicked the button";
}
</SCRIPT> </HEAD> <BODY>
<FORM RUNAT=SERVER>
<asp:Button id=Button1 runat="server" Text="Button1"
onclick="Button1_Click" />
<asp:Label id=Label1 runat=server /> </FORM>
</BODY> </HTML>
Các điều khiển phía Server Giới thiệu về Server control.
Khi tạo một Web Form, ta có thể sử dụng các loại điều khiển sau:
HTML server control Các thành phần HTML đợc mở rộng cho phía server do đó ta có thể lập trình với chúng, HTML server control này thất sự là các đối t- ợng rất gần gũi với các thành phần HTML mã chúng đaị diện.
ASP.NET server control. Các control này có nhiều các chức năng nội tại hơn HTML server control. ASP server contrl không chỉ gồm các loại control trong form nh button textbox chúng còn có những control có mục đích đặc niệt nh Calendar..
Control kiểm tra và nhập dữ liệụ Control này là một kiểu logic chặt chẽ cho phép ta kiểm tra dữ liệu nhập vàọ Ban có thể gắn nó với một control nhập dữ liệu để kiểm tra tính hợp lệ của dữ liệu nhập.
User control. Các control mà ta tự tạo nh các trang Web form. Ta có thể nhúng các user control trong các trang Web Form khác, thật dễ dàng để tạo menu, thanh công cụ, hay các thành phần có thể sử dụng lại khác.
Ta có thể sử dụng tất cả các control này trong cùng một form. 2.4.9 HTML server control
HTML server control là các thành phần HTML có chứa các thuộc tính có thể hiển thị và lập trình đợc trên server. Theo mặc định các thành phần HTML trong trang Web Form thờng bị bỏ qua và đợc coi nh các đoạn văn bản bình thờng trên server. Tuy nhiên khi chuyển HTML sang HTML serverr control, ta có thể mở rộng chúng nh là các thành phần có thể lập trình đợc trên server.
Mô hình đối tợng của HTML server control gần giống nh các thành phần HTML mà chúng đại diện. Ví dụ các đặc trng của HTML đợc mở rộng nh là các thuộc tính trong HTML server control.
Bất kỳ thành phần HTML nào trong trang cũng có thể đợc chuyển thành HTML server control. Sự chuyển đổi này là một quá trình đơn giản ta chỉ cần thêm thuộc tính RUNAT=SERVER thông báo này sẽ cho server biết cần phải tạo một đối tợng cho thành phần này khi xử lý.
Nếu ta muốn tham chiếu một control trong mã lệnh ta cần phải gán thuộc tính ID cho control đó.
Các đặc diểm của HTML server control
. Là một mô hình đối tợng mà ta có thể lập trình với nó trên server theo công nghệ lập trình hớng đối tợng. Mỗi server control mở rộng các thuộc tính cho phép ta thao tác với các đặc trng của HTML theo kiểu lập trình.
. Một bộ các sự kiện mà ta có thể viết các phơng thức theo cách mà ta thờng làm với các control trong Window form chỉ khác là các sự kiện này đợc nắm bắt ở phía server.
. Khả năng nắm bắt sự kiện ở phía client
. Tự động quản lý trang thái cho các giá trị của control trong form. Nếu có một round trip xảy ra tới server mà giá trị ngời dùng nhập vào trong HTML server control thì chúng đợc lu lại một cách tự động khi trang đợc gửu trở lại trình duyệt.
Tơng tác với các control kiểm tra dữ liêu nhập (validation controls) do đó dễ dàng buộc ngời dùng diền các thông tin hợp lệ vào trong form.
. Ràng buộc dữ liệu với thuộc tính trong các control khác . . Hỗ trợ kiểu HTML 4.0.
2.4.10 ASP.NET server control
ASP.NET server control là bộ control thứ hai đợc thiết kế với rất nhiều khác biệt. Chúng không thể hiện giống hệt nh các HTML server control. Thay vào đó chúng đợc định nghĩa nh là các control trừu tợng mà đại diện cho các thành phần HTML vì các control này thật sự khác với mô hình để lập trình. Ví dụ RadioButtonList trong ASP.NET là một control nhng nó lại gồm các table trong mã HTML.
ASP.NET server control bao gồm các control trong form truyền thống nh button và textbox các control phức tạp nh tablẹ Chúng cũng gồm có các control cung cấp các chức năng thớng xuyên sử dụng nh là hiển thị dữ liệu trong lới, chọn ngày tháng..
Ví dụ sau miêu tả làm thế nào để đa vào trong trang .aspx một thành phần điều khiển:
<html> <body>
<h3><font face="Verdana">Declaring Server Controls</font></h3>
This sample demonstrates how to declare the <asp:label> server control and
manipulate its properties within a pagẹ <p>
<hr>
<asp:label id="Message1" font-size="16" font-bold="true" forecolor="red" runat=server>This is Message One</asp:label>
<br>
<asp:label id="Message2" font-size="20" font-italic="true" forecolor="blue" runat=server>This is Message Two</asp:label>
<br>
<asp:label id="Message3" font-size="24" font-
underline="true" forecolor="green" runat=server>This is Message Three</asp:label>
</body> </html>
Sau đây là các đặc điểm thêm vào trong các control ASP.NET: Mô hình đối tợng phong phú cung cấp nhiều khả năng lập trình.
Tự động xác định trình duyệt. Các control có thể xác định trình duyệt và tạo mã tơng ứng cho trình duyệt đó.
Một số control có khả năng định dạng theo cách ta muốn thể hiện bằng cách sử dụng templates.
Một số control có khả năng xác định các sự kiện và ngay lập tức post lên server hoặc là đợc cache và phát sinh khi form đợc đệ trình.
Trong lúc thiết kế ở dạng HTML, các control xuất hiện trong trang có dạng: <asp:button attributes runat=”server”/>
Các thuộc tính trong trờng hợp này không giống nh các trong các thành phần HTML, thay vào đó chúng là các thuộc tính của Web control.
Khi trang Web form chạy, các web server control trong trang thờng đợc thể hiện nh các thành phần HTML. Ví dụ một textbox control thì giống nh kiểu thẻ <INPUT> hay <TEXTAREA>.
Để thêm các Control vào trang Web Form.
Việc thêm các server control vào trang Web Form đơn giản nh thêm các thành phần HTML. Cú pháp chính xác mà ta sử dụng phụ thuộc vào control mà ta thêm vào, nhng thờng thiết lập theo cách sau đâỵ
Đặt thuộc tính ID cho các control trừ khi các control đó là một phần của một control phức tạp và sẽ đợc lặp lại( nh các control Repeater, DataList và DataGrid).
Web server control đợc khai báo với một thẻ XML mà tham chiếu đến asp namespacẹ Các thẻ phải đợc đóng lại, ta có thể sử dụng thẻ đóng cụ thể hay nếu các control không có các thành phần con ta có thể dùng thẻ tự đóng.
Tiếp đầu ngữ asp: cho biết điều kgiển đợc tạo ra từ th viện là một thành phần của ASP.NET. Sử dụng tiếp đầu ngữ làm phân vùng tên namespace cho phép ta tạo ra nhiều phần tử hay thành phần điều khiển cùng tên nhng đợc đặt trong các th