243
Chương 7: ASP.NET và Web Form
lblData.Text += "<b>Found query string data:</b> " + data + "<br>";
}
3.
3.
T o các bi n thành viên có tr ng thái cho trang
ạ
ế
ạ
T o các bi n thành viên có tr ng thái cho trang
ạ
ế
ạ
Bạn cần tạo các biến thành viên trong lớp trang và bảo đảm các giá trị của
chúng được giữ lại khi trang được post-back.
Phản ứng với sự kiện
Page.PreRender
, và ghi tất cả các biến thành viên vào view
state. Phản ứng với sự kiện
Page.Load
, và lấy tất cả các giá trị của các biến thành
viên từ view state. Phần mã còn lại của bạn giờ đây có thể tương tác với các biến
này mà không phải lo lắng các vấn đề về trạng thái.
ASP.NET cung cấp nhiều cơ chế trạng thái, như đã được mô tả trong mục 7.2. Tuy nhiên, bạn
không thể sử dụng chúng một cách tự động—tất cả đều đòi hỏi một đoạn mã để đặt thông tin
vào và lấy thông tin ra. Bạn có thể thực hiện các công việc này một lần. Khi đó, phần mã còn
lại của bạn có thể tương tác trực tiếp với biến thành viên.
Để cách tiếp cận này có thể làm việc được, bạn cần đọc các giá trị của biến vào đầu mỗi
postback. Sự kiện
Page.Load
là một chọn lựa lý tưởng cho đoạn mã này vì nó luôn phát sinh
trước bất cứ sự kiện điều khiển nào khác. Bạn có thể sử dụng phương thức thụ lý sự kiện
Page.Load
để khởi dựng tất cả các biến. Ngoài ra, bạn cần lưu trữ tất cả các biến trước khi
trang được gửi cho người dùng, sau khi tất cả việc xử lý đã hoàn tất. Trong trường hợp này,
bạn có thể đáp ứng cho sự kiện
Page.PreRender
, vì sự kiện này phát sinh sau tất cả các
phương thức thụ lý sự kiện khác, chỉ trước khi trang được chuyển thành HTML và gửi cho
client.
Trang ví dụ sau đây trình bày cách duy trì một biến thành viên của trang có tên là
memberValue
:
using System;
using System.Web;
using System.Web.UI.WebControls;
public class StatefulMembers : System.Web.UI.Page {
// (Bỏ qua phần mã designer.)
private int memberValue = 0;
private void Page_Load(object sender, System.EventArgs e) {
// Nạp lại tất cả các biến thành viên.
if (ViewState["memberValue"] != null) {
memberValue = (int)ViewState["memberValue"];