net06 asp.net applications & state management

68
Công nghệ .NET .NET Technology Lương Trần Hy Hiến Bộ môn Công nghệ Phần mềm Khoa Công Nghệ Thông Tin Trường ĐHSP TP. Hồ Chí Minh

Upload: hoangnguyentien

Post on 15-Aug-2015

15 views

Category:

Education


0 download

TRANSCRIPT

Page 1: Net06 asp.net applications & state management

Công nghệ .NET.NET Technology

Lương Trần Hy HiếnBộ môn Công nghệ Phần mềm

Khoa Công Nghệ Thông Tin

Trường ĐHSP TP. Hồ Chí Minh

Page 2: Net06 asp.net applications & state management

Chương 3:

ASP.NET Application & State Management

Page 3: Net06 asp.net applications & state management

Công nghệ NET 3 HIENLTH

Nội dung

Request

Response

Server

Quản lý trạng thái

o View state

o Session state

o Cookie

Cross-page Postback

Application

Page 4: Net06 asp.net applications & state management

Công nghệ NET 4 HIENLTH

Tổng quan

Page 5: Net06 asp.net applications & state management

Công nghệ NET 5 HIENLTH

Request Object

Request là một thể hiện của lớp HttpRequest, Browserdùng Request object để gửi thông tin cần thiết tớiServer

Dùng để đọc thông tin từ client gửi lên (header, querystring, cookies, …)

Data

Page 6: Net06 asp.net applications & state management

Công nghệ NET 6 HIENLTH

Request Object (tt)

Các thuộc tính

RequestType: trả về phương thức truyền dữ liệu từclient đến server gồm 2 phương thức POST và GET

Cú pháp

valMethod=Request.RequestType

Page 7: Net06 asp.net applications & state management

Công nghệ NET 7 HIENLTH

Lấy dữ liệu gửi đi

Request.Form("Phần_tử_cần_đọc"): Đọc giá trị của một phần tử được gửi theo phương thức POST.

Request.QueryString("Phần_tử_cần_đọc"): Đọc giá trị của một phần tử được gửi theo phương thức GET.

Page 8: Net06 asp.net applications & state management

Công nghệ NET 8 HIENLTH

Request Object - POST

Ví dụ: thiết kế giao diện như hình

Page 9: Net06 asp.net applications & state management

Công nghệ NET 9 HIENLTH

Mã giao diện<%@ Page Language="C#" AutoEventWireup="true"

CodeFile="Default.aspx.cs" Inherits="_Default" %><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"><title>trang 1</title></head><body>

<form id="form1" runat="server" ><table>

<tr><td style="width: 100px">username</td><td style="width: 100px"><asp:TextBox ID="txtUser"

runat="server"></asp:TextBox></td></tr><tr><td style="width: 100px">password</td>

<td style="width: 100px"><input type="password" id="txtPass" runat="server" /></td></tr>

<tr><td style="width: 100px" colspan="2"><asp:Button ID="Button1" runat="server" Text="Button" PostBackUrl="~/Default2.aspx"/></td></tr>

</table> </form>

</body></html>

Page 10: Net06 asp.net applications & state management

Công nghệ NET 10 HIENLTH

Request Object - POST

Ví dụ (tt):Lấy giá trị của UserName và Password trên form

string sUser, sPass;sUser = Request.Form["txtUser"];sPass = Request.Form["txtPass"];//Xuất ra màn hình

Page 11: Net06 asp.net applications & state management

Công nghệ NET 11 HIENLTH

Request Object - GET

Lấy dữ liệu từ các phần tử của form:

Cú pháp:

Nếu tham số không có giá trị thì giá trị trả về của tham số khi sử dụng Request.QueryString là null.

Request.QueryString[“varName”]

Page 12: Net06 asp.net applications & state management

Công nghệ NET 12 HIENLTH

Request Object - GET

<form method=“Get" action=“CheckUser.aspx">UserName: <input type="text" name="txtUser" /><br /Password: <input type="password" name="txtPwd" /><br />

<input type="Submit" name="btnLogin" value="Login" /><br /></form>

Page 13: Net06 asp.net applications & state management

Công nghệ NET 13 HIENLTH

Request Object - GET

Tại Server (file CheckUser.aspx), lấy giá trị của UserName và Password

string strUser, strPws;

strUser = Request.QueryString["txtUser"];

strPws = Request.QueryString["txtPass"];

Page 14: Net06 asp.net applications & state management

Công nghệ NET 14 HIENLTH

Request Object - GET

Hoặc

<a href=“ReadNews.aspx?CatID=edu&NewsID=98708”>Tin Giáo dục

</a>

Var1=Request.QueryString[“CatID”];//Var1=eduVar2=Request.QueryString[“NewsID”];//Var2=98708

Tại ReadNews.aspx muốn lấy giá catID and NewsID, sử dụng cú pháp:

Page 15: Net06 asp.net applications & state management

Công nghệ NET 15 HIENLTH

Demo Query String

Tạo một ứng dụng truy cập CSDL GameList gồm:

oGameList.aspx: hiển thị tên tất cả các game có trong database, với mỗi game tạo url dạng querystring với id của game đó, user kích vào sẽ mở ra trang GameDetail.aspx cho phép xem chi tiết thông tin của game đó

oGameDetail.aspx: lấy id từ querystring, đọc CSDL GameList và trả về chi tiết tất cả thông tin của game.

Page 16: Net06 asp.net applications & state management

Công nghệ NET 16 HIENLTH

Query String

Page 17: Net06 asp.net applications & state management

Công nghệ NET 17 HIENLTH

Query String

Tạo trang GameList.aspx

o Trang này có control là label sẽ hiển thị danh sách các tên game.

Label: có id là “lblGameList”

Page 18: Net06 asp.net applications & state management

Công nghệ NET 18 HIENLTH

Query String

Trang GameList.aspx khi thực thi

Danh sách các tên game lấy trong database

Hyperlink xem chi tiết của “Thuận Thiên Kiếm”

Page 19: Net06 asp.net applications & state management

Công nghệ NET 19 HIENLTH

Query String

Tạo trang GameDetail.aspx

o Trang này có 4 label chứa các thông tin chi tiết của game:

• Tên game: lblTenGame, nhà sản xuất: lblNSX, nhà phát hành: lblNPH, thể loại: lblTheLoai

Page 20: Net06 asp.net applications & state management

Công nghệ NET 20 HIENLTH

Query String

Phần xử lý của GameDetail.aspxprotected void Page_Load(object sender, EventArgs e)

{// lấy query stringstring sid = Request.QueryString["id"]; // tham số “id”if (sid != null) // kiểm tra xem tham số này có tồn tại hay không{

// truy cap database de lay du lieustring sConn = @"server=.; database=gamelist; trusted_connection=true";SqlConnection conn = new SqlConnection(sConn); // tạo đối tượng kết nốitry{

conn.Open(); // mở kết nốistring query = string.Format("select * from DanhMuc where ID={0}",sid);SqlCommand cmd = new SqlCommand(query, conn);SqlDataReader reader;reader = cmd.ExecuteReader(); // thực thi câu truy vấn

// phần tiếp theo trong slide kế…

Page 21: Net06 asp.net applications & state management

Công nghệ NET 21 HIENLTH

Query String

// tiếp theo của silde trướcif (reader.HasRows) // nếu có dữ liệu

{reader.Read(); // đọc 1 dòng dữ liệulblTenGame.Text = reader["TenGame"].ToString();lblNSX.Text = reader["NhaSanXuat"].ToString();lblNPH.Text = reader["NhaPhatHanh"].ToString();lblTheLoai.Text = reader["TheLoai"].ToString();

}reader.Close(); conn.Close(); // đóng kết nối

}catch (Exception ex){

Response.Write(ex.Message); // hiển thị thông báo lỗi}

} // end if (sid !=null)} // end method Page_Load

Page 22: Net06 asp.net applications & state management

Công nghệ NET 22 HIENLTH

Query String

Chạy demo

id = 5 là mã game Cổ Long

Page 23: Net06 asp.net applications & state management

Công nghệ NET 23 HIENLTH

Response Object

Response: Đối tượng này được dùng để gửi nội dung (một xâu) bất kỳ về cho trình duyệt

Phương thức:o Response.Write(<Biểu thức>) dùng để gửi giá trị biểu

thức truyền vào cho phía trình duyệt.

o Response.Redirect(“địa chỉ URL”): Chuyển tới một trang khác.

Data

Page 24: Net06 asp.net applications & state management

Công nghệ NET 24 HIENLTH

Response Object (tt)

Các phương thức

Response.Clear(): Xóa vùng tạm

Cú pháp:

Response.Flush() dùng để đưa dữ liệu còn trong bộ đệm phía server về cho phía trình duyệt.

Response.End(): Kết thúc tiến trình xử lý trên Server và đẩy dữ liệu tới Client

Response.Clear()

Page 25: Net06 asp.net applications & state management

Công nghệ NET 25 HIENLTH

Response Object

Các thuộc tính

Buffer: có 2 giá trị true và false quy định cách

truyền tải dữ liệu:

o True: Hoàn tất công việc và gửi một lần

o False: Thực hiện xong đến đâu thì gửi đến đó

Page 26: Net06 asp.net applications & state management

Công nghệ NET 26 HIENLTH

Server Object

Đối tượng Server cung cấp thông tin của Web server choứng dụng, bao gồm các phương thức giúp chuyển điều khiểngiữa các trang với nhau, lấy thông tin về mã lỗi, encode, …

Các thuộc tính

o MachineName: tên server

o ScriptTimeout: thiết lập thời gian xử lý tối đa 1 file

Ví dụ:

Server.ScriptTimeout = 100s //thiết lập thời gian mặc định

Page 27: Net06 asp.net applications & state management

Công nghệ NET 27 HIENLTH

Server Object

Các phương thức

MapPath(“URL”): ánh xạ đường dẫn ảo thành đường

dẫn vật lý cho một tập tin trên Server

o Cú pháp:

o Path là chuỗi thực hiện đường dẫn tương đối của tập tintrên ứng dụng Web

o Phương thức sẽ trả về chuỗi hiện thực đường dẫn vật lýcủa tập tin đó.

Server.MapPath(path)

Page 28: Net06 asp.net applications & state management

Công nghệ NET 28 HIENLTH

Server Object

Transfer: gửi tất cả thông tin mà nó đã xử lý từ trang

ASPX hiện hành sang trang ASPX khác. Cú pháp:

Trong đó, tham số path là đường dẫn của tập tin ASPX

cần chuyển điều khiển.

Lưu ý:

o sử dụng ký hiệu “~” để chỉ đến đường dẫn tương đối

o sử dụng ký hiệu “..” để chỉ đến đường dẫn tuyệt đối

Server.Transfer(path)

Phân biệt Server.Tranfer vs Reponse.Redirect

Page 29: Net06 asp.net applications & state management

Công nghệ NET 29 HIENLTH

Server Object

HtmlEncode(str): dùng để mã hoá HTML thànhchuỗi

Cú pháp:

Server.HTMLEncode(str)

Page 30: Net06 asp.net applications & state management

Công nghệ NET 30 HIENLTH

Server Object

Khi mã hoá chuỗi HTML sang chuỗi bình

thường nếu gặp các ký tự như sau sẽ chuyển

sang ký tự tương ứng:

o Ký tự <chuyển thành &lt;

o Ký tự >chuyển thành &gt;

o Ký tự & chuyển thành &amp;

o Dấu đôi “ chuyển thành &quot;

Page 31: Net06 asp.net applications & state management

Công nghệ NET 31 HIENLTH

Server Object

HtmlDecode(strcontent):giải mã các thẻ HTML

Ví dụ:

Str = “n&gt;5”

Str = Server.HtmlDecode(str); // kết quả n>5

Page 32: Net06 asp.net applications & state management

Công nghệ NET 32 HIENLTH

Server Object

Phương thức URLEncode: Tương tự nhưphương thức HTMLEncode, phương thứcURLEcode dùng để mã hoá URL thành chuỗi

Cú pháp:

Quy tắc chuyển:

o Ký tự khoảng trắng chuyển thành dấu +

o Ký tự không thuộc ký tự chữ và số sẽ chuyển thành số hexadecimal

Server.URLEncode(str)

Page 33: Net06 asp.net applications & state management

Công nghệ NET 33 HIENLTH

Quản lý trạng thái

Page 34: Net06 asp.net applications & state management

Công nghệ NET 34 HIENLTH

Quản lý trạng thái

Mỗi ứng dụng cần chia sẽ thông tin giữa các request

ASP.NET cung cấp các cơ chế cho phép chia sẽ thông tin giữa các Request:

o Các đối tượng quản lý trạng thái (State) phía client và server.

o Cơ chế Cache

Page 35: Net06 asp.net applications & state management

Công nghệ NET 35 HIENLTH

Các đối tượng quản lý trạng thái

Client-based State

o Được lưu trữ ở máy Client

o Gồm: ViewStates, Hidden Fields, QueryStrings, Cookies

Server-based State

o Được lưu trữ ở máy Server

o Gồm: Session, Application

Page 36: Net06 asp.net applications & state management

Công nghệ NET 36 HIENLTH

View state

Cho phép lưu các kiểu dữ liệu của .NET

Lưu trữ ở client side, trong hidden field của trang web

Lưu trữ trong các lần post back của trang. Mất dữ liệu khi user nhập vào URL mới

Phạm vi giới hạn trong một trang web

Bảo mật: mặc định ở trạng thái insecure. Tuy nhiên ta có thể thiết lập page directive để mã hóa

Hạn chế: lưu trữ số lượng lớn thông tin trong viewstate sẽ làm chậm thời gian response và request

Thường dùng để cài đặt thông tin đặc biệt nào đó của page

Page 37: Net06 asp.net applications & state management

Công nghệ NET 37 HIENLTH

View state

View state là ưu tiên chọn lựa đầu tiên khi cần lưu trữ thông tin trong phạm vi của một trang web

View state cũng được sử dụng bởi ASP.NET Web control, cho phép các control này duy trì những thuộc tính giữa các lần postback

Có thể add dữ liệu vào

view state collection

thông qua thuộc tính

Page.ViewState

int count;if (ViewState["Count"] == null)

count = 0;else

count = (int) ViewState["Count"];count += 1;

ViewState["Count"] = count;

Label1.Text = string.Format("Số lần postback {0}", count);

Page 38: Net06 asp.net applications & state management

Công nghệ NET 38 HIENLTH

View state

Thuận lợi:

View state không sử dụng memory trên server

View state cũng không bị ràng buộc nào (như time out)

Tình huống hạn chế khi sử dụng view state

Cần thiết lưu trữ dữ liệu có mức độ nhạy cảm cao. View state cũng có thể mã hóa, nhưng session lựa chọn tốt hơn

Cần thiết lưu trữ thông tin được sử dụng trong nhiều trang. Trong tình huống này ta sử dụng session, cookie hoặc query string.

Cần thiết lưu trữ thông tin lớn và không muốn làm chậm thời gian truyền tải, nên sử dụng database, cache hoặc session.

Page 39: Net06 asp.net applications & state management

Công nghệ NET 39 HIENLTH

Session là gì?

User 1

User 2

User 3

Session: user 1Session: user 2Session: user 3

Page 40: Net06 asp.net applications & state management

Công nghệ NET 40 HIENLTH

Session là gì?

Khái niệm phiên làm việc• Mỗi khi user request một trang web lần đầu tiên thì

phiên làm việc được tạo ra.• Một nhận dạng phiên làm việc được cấp bởi server• Phiên làm việc kết thúc khi

• Người lập trình hủy• Kết thúc cycle life (quy định bởi Timeout)• User đóng trình duyệt

Phiên làm việc là cách thức trao đổi/chia sẻ dữ liệu giữa các trang web trong Web app.

Page 41: Net06 asp.net applications & state management

Công nghệ NET 41 HIENLTH

Session

Cho phép lưu trữ dữ liệu kiểu .NET

Lưu trữ trên bộ nhớ của server

Thời gian sống kết thúc sau một khoảng thời gian định nghĩa trước (thường là 20 phút, có thể thay đổi, hoặc lập trình hủy)

Phạm vi toàn bộ ứng dụng .NET

Tính bảo mật cao, do dữ liệu lưu trữ trên server, không bao giờ chuyển cho client và mỗi client có client session id riêng

Lưu trữ session với dữ liệu lớn cũng có thể làm chậm server, đặc biệt nếu nhiều người truy cập đồng thời, do mỗi user sẽ có bản copy session riêng!

Page 42: Net06 asp.net applications & state management

Công nghệ NET 42 HIENLTH

Session

• Mỗi user sẽ được gán một giá trị gọi là Session id, giá trị này là duy nhất

• Được lưu trữ trong non-persistent cookie cho đến khi trình duyệt đóng.

• Session state sử dụng cú pháp collection như là view state

int count;if (Session["Count"] == null)

count = 0;else

count = (int)Session["Count"];count++;Session["Count"] = count;

int count;if (Session["Count"] == null)

count = 0;else

count = (int)Session["Count"];count++;Session["Count"] = count;

Page 43: Net06 asp.net applications & state management

Công nghệ NET 43 HIENLTH

Session – cấu hình

• Thời gian sống của session có thể thiết lập thông qua web.config (đơn vị là phút)

• Session có thể làm việc mà không cần cookie

• Trong trường này Session ID lưu trữ trong URL

<configuration><system.web>

<sessionState timeout="10" /></system.web>

</configuration>

<configuration><system.web>

<sessionState timeout="10" /></system.web>

</configuration>

<sessionState cookieless="true" /><sessionState cookieless="true" />

http://server/(h44a1e55c0breu552yrecobl)/page.aspxhttp://server/(h44a1e55c0breu552yrecobl)/page.aspx

Page 44: Net06 asp.net applications & state management

Công nghệ NET 44 HIENLTH

Session

Phương thức

Abandon(): giải phóng vùng nhớ được dùng để duy trìđối tượng Session trên Web Server ngay khi được gọithực hiện. Những yêu cầu sau đó được Web server coinhư là một người dùng mới.

Remove(“SessionName”): xoá dữ liệu trên biến “VarSession”

RemoveAll(): Xoá dữ liệu, nhưng sessionID vẫn tồn tại

Page 45: Net06 asp.net applications & state management

Công nghệ NET 45 HIENLTH

Session

Ví dụ: Tạo trang (Page) hoặc User Control là Login.aspx

Thiết kế giao diện như sau:

Page 46: Net06 asp.net applications & state management

Công nghệ NET 46 HIENLTH

Session

Khởi tạo và Huỷ thông tin đăng nhập của người dùng trong Session

void Session_Start(object sender, EventArgs e)

{

// Tăng số khách viếng khi có 1 phiên làm việc của user

Application["SoKhachVieng"] = (int)Application["SoKhachVieng"] + 1;

// Thiết lập thời gian TimeOut cho mọi phiên là 30 phút

Session.Timeout = 30;

// Đặt trạng thái ban đầu của user là chưa đăng nhập

Session["LOGIN_OK"] = false;

}

Page 47: Net06 asp.net applications & state management

Công nghệ NET 47 HIENLTH

protected void btnLogin_Click(object sender, EventArgs e) {

if (Authority(txtUserName.Text, txtPassword.Text)) {

// Lưu thông tin đăng nhập thành công vào SessionSession["LOGIN_OK"] = true; // Ẩn chức năng LoginpanelLogin.Visible = false; // Hiển thị chức năng logout và lời chào mừng LblGreeting.Text = "Chào mừng bạn " +

txtUserName.Text + " đã đăng nhập website!"; } else

{ // Lưu thông tin đăng nhập thất bại vào Session Session["LOGIN_OK"] = false;

} }

Page 48: Net06 asp.net applications & state management

Công nghệ NET 48 HIENLTH

Session

protected bool Authority(string user, string pwd)

{

if (user == "admin" && pwd == "12345")

{

return true;

}

return false;

}

Page 49: Net06 asp.net applications & state management

Công nghệ NET 49 HIENLTH

Cookie

• Là mẫu tin nhỏ (dạng chuỗi) dùng để lưu trữ thông tin người dùng trên máy của client (trong bộ nhớ hoặc file text nhỏ).

• Lifetime được thiết lập bởi người lập trình, được sử dụng trong nhiều trang và trong các lần visit site

• Phạm vi toàn bộ ứng dụng .NET

• Không bảo mật, do toàn bộ dữ liệu được gởi cho client. Cookie có thể modify dễ dàng.

• Tương tự như view state, hạn chế chỉ sử dụng dữ liệu nhỏ

• Thường lưu trữ thông tin cá nhân để custom cho website.

Page 50: Net06 asp.net applications & state management

Công nghệ NET 50 HIENLTH

Cookie

Để thiết lập một cookie:• Tạo đối tượng System.Net.HttpCookie• Tạo dữ liệu dạng chuỗi• Add đối tượng cookie vào đối tượng Response của

trang web hiện tại

HttpCookie cookie = new HttpCookie(“Account");cookie[“Username"] = “Nguyen Mai Chi";Response.Cookies.Add(cookie);

HttpCookie cookie = new HttpCookie(“Account");cookie[“Username"] = “Nguyen Mai Chi";Response.Cookies.Add(cookie);

Page 51: Net06 asp.net applications & state management

Công nghệ NET 51 HIENLTH

Cookie

Để truy cập cookie• Sử dụng đối tượng Request để lấy cookie • Kiểm tra xem cookie khác null?• Truy cập giá trị cookie qua thuộc tính key

string str = "";HttpCookie cookie = Request.Cookies["Account"];if (cookie != null)

str = cookie["Username"];

string str = "";HttpCookie cookie = Request.Cookies["Account"];if (cookie != null)

str = cookie["Username"];

Page 52: Net06 asp.net applications & state management

Công nghệ NET 52 HIENLTH

Cookie

• Cookie được phân làm 2 loại• Persistent cookies/permanent cookie

• Lưu trữ trong đĩa cứng của client cho đến khi hết hạn, dạng cookie này được thiết lập ngày hết hạn (expiration date)

• Non persistent cookie/temporary cookie• Không định nghĩa thời gian hết hạn, cookie được lưu trữ

trong browser memory, kết thúc khi đóng trình duyệt!

• Không có sự khác nhau khi sử dụng persistent và non persistent cookie

Page 53: Net06 asp.net applications & state management

Công nghệ NET 53 HIENLTH

Cookie

• Khai báo Persistent cookie

HttpCookie cookie = new HttpCookie("Account");cookie["Username"] = "Nguyen Mai Chi";cookie["email"] = “[email protected]";// khai báo thời gian hết hạn cho cookiecookie.Expires = DateTime.Now.AddDays(5);// add cookie vào response của trang webResponse.Cookies.Add(cookie);

HttpCookie cookie = new HttpCookie("Account");cookie["Username"] = "Nguyen Mai Chi";cookie["email"] = “[email protected]";// khai báo thời gian hết hạn cho cookiecookie.Expires = DateTime.Now.AddDays(5);// add cookie vào response của trang webResponse.Cookies.Add(cookie);

Page 54: Net06 asp.net applications & state management

Công nghệ NET 54 HIENLTH

Cross-page Postback

• Cross page postback là dạng postback gởi tới trang khác

• Các button control như Button, ImageButton và LinkButton đều có thuộc tính PostBackUrl

• Để sử dụng Cross-page postback• Thiết lập PostBackUrl cho web form cần chuyển

đến• Khi user click vào button• Page sẽ được gởi tới URL mới với tất cả các giá trị

của các control trong trang hiện thời.

Page 55: Net06 asp.net applications & state management

Công nghệ NET 55 HIENLTH

Cross-page Postback

Trang cross page có thể truy cập trang trước thông qua thuộc tính PreviousPage

protected void Page_Load(object sender, EventArgs e){

if (PreviousPage != null){

lblInfo.Text = "You came from " +PreviousPage.Header.Title;

}}

protected void Page_Load(object sender, EventArgs e){

if (PreviousPage != null){

lblInfo.Text = "You came from " +PreviousPage.Header.Title;

}}

Page 56: Net06 asp.net applications & state management

Công nghệ NET 56 HIENLTH

Cross-page Postback

Để truy cập chi tiết hơn, các giá trị của control trên form, thì cần phải gán tham chiếu PreviousPage cho lớp page tương ứng

Ta có thể add thuộc tính vào trang nguồn và đọc chúng ở trang đích.

if (PreviousPage != null) {SourcePage prevPage = PreviousPage as

SourcePage;if (prevPage != null){

lblInfo.Text = "Welcome" + prevPage.NameEntry;}

}

if (PreviousPage != null) {SourcePage prevPage = PreviousPage as

SourcePage;if (prevPage != null){

lblInfo.Text = "Welcome" + prevPage.NameEntry;}

} Tên lớp của trang source

Thuộc tính của lớp SourcePage

Page 57: Net06 asp.net applications & state management

Công nghệ NET 57 HIENLTH

Cross-page Postback

• Minh họa cross-page Postback

• Tạo 2 trang • SendInfo.aspx: chứa form nhập thông tin user• TargetPage.aspx: lấy thông tin từ user từ

SendInfo.aspx và hiển thị lên trình duyệt.

Page 58: Net06 asp.net applications & state management

Công nghệ NET 58 HIENLTH

Cross-page Postback

Mô tả control của trang SendInfo.aspx

Id control Kiểu control Thuộc tính Diễn giải

txtUsername TextBox Nhập tên user

txtEmail TextBox Nhập địa chỉ email

txtCompany TextBox Nhập tên công ty

btnPostInfo Button PostBackUrl = ~/TargetPage.aspx

Button thực thi thao tác Cross Page Postback

Page 59: Net06 asp.net applications & state management

Công nghệ NET 59 HIENLTH

Cross-page Postback

Khai báo thuộc tính PostBackUrl cho button btnPostInfo

Khai báo URL cho PostBackUrl

Page 60: Net06 asp.net applications & state management

Công nghệ NET 60 HIENLTH

Cross-page Postback

• Mô tả trang TargetPage.aspx• Lấy thông tin từ SendInfo.aspx và hiển thị ra

trình duyệt

Id control Kiểu control Thuộc tính Diễn giải

lblUsername Label - Hiển thị tên user

lblEmail Label - Hiển thị email

lblCompany Label - Hiển thị công ty

Page 61: Net06 asp.net applications & state management

Công nghệ NET 61 HIENLTH

Cross-page Postback

Phần xử lý của TargetPage lấy thông tin từ SourcPage.aspx

protected void Page_Load(object sender, EventArgs e) {// lấy thông tin từ previous pageif (PreviousPage != null) {

// biến đối tượng source tham chiếu đến previous pageSendInfo source = PreviousPage as SendInfo;

// lấy các control của previous page (SourcePage.aspx)TextBox username = (TextBox) source.FindControl("txtUsername");TextBox email = (TextBox) source.FindControl("txtEmail");TextBox company = (TextBox)source.FindControl("txtCompany");

// gán thông tin cho các labellblUsername.Text = username.Text;lblEmail.Text = email.Text;lblCompany.Text = company.Text;

} // end if} // end method Page_Load

ID của control trong SendInfo.aspx

SendInfo là class page của SendInfo.aspx

Page 62: Net06 asp.net applications & state management

Công nghệ NET 62 HIENLTH

Application

Đối tượng Application được sử dụng để quản lý

tất cả các thông tin của một ứng dụng web, bao

gồm các file, trang web, sự kiện, module và code

trong thư mục web ảo(virtual directory) và các thư

mục con của nó.

Application chia sẻ thông, nghĩa là một Application

sau khi khởi tạo thì mọi người sử dụng có thể truy

cập đối tượng này.

Page 63: Net06 asp.net applications & state management

Công nghệ NET 63 HIENLTH

Application vs Session

Application:

o Chia sẽ dữ liệu cho tất cả người dùng của một ứng dụng (dữ liệu toàn cục, đa người dùng)

Session:

o Chia sẽ dữ liệu cho nhiều Web Form trong cùng một Session

o Chỉ có Session hiện hành mới có khả năng truy cập thông tin Session của chính nó.

Page 64: Net06 asp.net applications & state management

Công nghệ NET 64 HIENLTH

Sự kiện Application và Session

Application_Start: Người dùng đầu tiên viếng thăm 1 trang web trong ứng dụng web được gọi.

Application_End: Khi ứng dụng web kết thúc (không có người dùng nào mở trang web của ứng dụng)

Application_Error: Xảy ra khi có lỗi trong ứng dụng

Session_Start: Một người dùng mới, ghé thăm 1 trang web của ứng dụng

Session_End: Người dùng đó đóng trình duyệt hoặc sau một khoảng thời gian timeout không request lên ứng dụng

Page 65: Net06 asp.net applications & state management

Công nghệ NET 65 HIENLTH

Application

Khởi tạo:

Đối tượng Application được tạo khi client yêu cầu bất kỳ trang nào trong ứng dụng

Application.Lock();

Application[“TenBien”] = “Value” ;

Application.UnLock();

Page 66: Net06 asp.net applications & state management

Công nghệ NET 66 HIENLTH

Application

Lấy giá trị:

<biến> = Application[“tên biến”];string s = (string) Application[“chuoi”] ;

int count = (int) Application[“count”] ;

Page 67: Net06 asp.net applications & state management

Công nghệ NET 67 HIENLTH

Ví dụ dùng Application

Đọc số lượt truy cập, số người online

Page 68: Net06 asp.net applications & state management

Công nghệ NET 68 HIENLTH

THE END