Điều khiển HTML (tag HTML) trong trang ASP.Net có thể xem như những chuỗi văn bản bình thường. Để có thể được sử dụng lập trình ở phía Server, ta gán thuộc tính runat="Server" cho các điều khiển HTML đó. Những điều khiển HTML (tag HTML) có thuộc tính runat="Server" được gọi là HTML Server Control.
Để chuyển các điều khiển HTML thành điều khiển HTML Server, ta chọn Run As Server Control từ thực đơn ngữ cảnh.
Các điều khiển HTML: Label, Textbox, Button
Xử lý sự kiện:
Private Sub butTong_ServerClick(…) … txtTong.Value = Val(txtA.Value) + Val(txtB.Value) End Sub
Upload file với điều khiển HTML File Field
Trong ví dụ sau, chúng ta sẽ thực hiện Upload tập tin lên server, cụ thể hơn, tập tin vừa Upload sẽ được lưu trong thư mục Upload.
Chú ý : Để chép được tập tin lên thư mục Upload, bạn cần phải cấp quyền cho phép ghi trên thư mục Upload
Private Sub butUpload_ServerClick(…, e … ) … Dim sTap_tin As String Dim sTen_file As String sTap_tin = fileTap_tin.PostedFile.FileName 'Phân tích đường dẫn tập tin để lấy tên tập tin sTen_file = sTap_tin.Substring(sTap_tin.LastIndexOf("\") + 1, sTap_tin.Length - sTap_tin.LastIndexOf("\") + 1)) 'Thực hiện chép tập tin lên thư mục Upload fileTap_tin.PostedFile.SaveAs(Server.MapPath("Upload\") & sTen_file) lblThong_bao.InnerHtml = "Thông báo: Bạn đã upload file công" End Sub
Đây là thành phần chính của giao diện, là nơi chứa các điều khiển, được sử dụng để thể hiện nội dung trang web đến người dùng.
Sự kiện Page_Init xảy ra đầu tiên khi trang web được yêu cầu.
Private Sub Page_Init(…) Handles MyBase.Init 'Do not modify it using the code editor. InitializeComponent() End Sub
Sự kiện này là nơi mà bạn sẽ đN 63;t phần lớn các xử lý, giá trị khởi động ban đầu cho trang web. Sự kiện này luôn xảy ra mỗi khi trang web được yêu cầu.
Private Sub Page_Load(…) Handles MyBase.Load 'Put user code to initialize the page here End Sub
Sự kiện này xảy ra khi trang Web chuẩn bị được trả về cho Client.
Private Sub Page_PreRender(ByVal sender As Object, …)Handles MyBase.PreRender End Sub
Sự kiện này đối lập với sự kiện Page_Init. Nếu như sự kiện Page_Init xảy ra đầu tiên khi trang Web được yêu cầu, thì đây, Page_Unload là xự kiện sau cùng, xảy ra sau tất cả những sự kiện khác.
Private Sub Page_Unload(ByVal sender As Object, …) Handles MyBase.Unload End Sub
Đây là một thuộc tính kiểu luận lý. Giá trị của thuộc tính này cho biết trạng thái của trang Web khi được Load, nếu là lần Load đầu tiên, giá trị của thuộc tính này = False. Thuộc tính này thường được sử dụng trong sự kiện Page_Load để kiểm tra trạng thái của trang Web.
Private Sub Page_Load(…) Handles MyBase.Load 'Put user code to initialize the page here If Not IsPostBack Then lblPostBack.Text = "Đây là lần yêu cầu đầu tiên" Else lblPostBack.Text = "Đây là lần yêu cầu sau." End If End Sub
Trong trường hợp nội dung của trang Web vượt quá kích thước hiển thị của màn hình và bạn đang đọc ở phần giữa của trang Web, khi được ReLoad lại, màn hình sẽ hiển thị phần đầu của trang Web. Nếu giá trị của thuộc tính này là True, trình duyệt Web sẽ vẫn giữ nguyên vị trí mà bạn đang đọc sau khi Reload. Đây là một thuộc tính kiểu luận lý. Giá trị mặc định là False.
Dưới đây là các lý do bạn nên sử dụng ASP.Net Web Control:
- Đơn giản, tương tự như các điều khiển trên Windows Form.
- Đồng nhất : Các điều khiển Web server có các thuộc tính giống nhau -> dễ tìm hiểu và sử dụng.
- Hiệu quả : Các điều khiển Web Server tự động phát sinh ra các tag HTML theo từng loại Browser.
Label thường được sử dụng để hiển thị và trình bày nội dung trên trang web. Nội dung được hiển thị trong label được xác định thông qua thuộc tính Text. Thuộc tính Text có thể nhận và hiển thị nội dung với các tag HTML.
lblA.Text = "Đây là chuỗi văn bản thường" lblB.Text = "Còn đây là chuỗi văn bản được in đậm"
Điều khiển này được sử dụng để tạo ra các liên kết siêu văn bản.
Các thuộc tính
hplASP_net.Text = "Trang chủ ASP.Net" hplASP_net.ImageUrl = "Hinh\Asp_net.jpg" hplASP_net.NavigateUrl = "http://www.asp.net" hplASP_net.Target = "_blank"
TextBox là điều khiển được dùng để nhập và hiển thị dữ liệu. TextBox thường được sử dụng nhiều với các ứng dụng trên windows form.
Điều khiển này được dùng để hiển thị hình ảnh lên trang Web.
Thuộc tính
Các điều khiển Button, ImageButton, LinkButton mặc định đều là các nút Submit Button, mỗi khi được nhấn vào sẽ PostBack về Server.
Khi chúng ta thiết lập giá tri thuộc tính CommandName cho các điều khiển này, chúng ta gọi tên chung cho các điều khiển này là Command Button.
Chúng ta sẽ tìm hiểu 2 thuộc tính CommandName và CommandArgument ở phần sau.
Ngoài những thuộc tính trên, điều khiển ImageButton còn có các thuộc tính ImageURL, ImageAlign và AlternateText như điều khiển Image.
Button, LinkButton và ImageButton
ListBox và DropdownList là điều khiển hiển thị danh sách lựa chọn mà người dùng có thể chọn một hoặc nhiều (chỉ dành cho ListBox). Các mục lựa chọn có thể được thêm vào danh sách thông qua lệnh hoặc ở cửa sổ thuộc tính (Property Windows).
- AutoPostBack: Thuộc tính này qui định điều khiển có được phép tự động PostBack về Server khi chỉ số của mục chọn bị thay đổi. Giá trị mặc định của thuộc tính này là False - không tự động Postback.
- Items
Đây là tập hợp chứa các mục chọn của điều khiển. Ta có thể thêm vào mục chọn vào thời điểm thiết kế thông qua cửa sổ ListItem Collection Editor, hoặc thông qua lệnh.
- Rows: Qui định chiều cao của ListBox theo số dòng hiển thị.
- SelectionMode: Thuộc tính này xác định cách thức chọn các mục trong ListBox. SelectionMode chỉ được phép thay đổi trong quá trình thiết kế, vào lúc thực thi chương trình, thuộc tính này chỉ đọc.
Các thuộc tính sau s ẽ giúp bạn xác định chỉ số, giá trị của mục đang được chọn. Trong trường hợp điều khiển cho phép chọn nhiều, ta duyệt qua các Item trong tập hợp Items, sử dụng thuộc tính Selected của đối tượng Item để kiểm tra xem mục đó có được chọn hay không. (Xem ví dụ ở trang kế tiếp)
- SelectedIndex: Cho biết chỉ số của mục được chọn. Trong trường hợp chọn nhiều mục, SelectedIndex sẽ trả về chỉ số mục chọn đầu tiên.
- SelectedItem: Cho biết mục được chọn. Trong trường hợp chọn nhiều mục, SelectedItem sẽ trả về mục chọn đầu tiên.
- SelectedValue: Cho biết giá trị của mục được chọn. Trong trường hợp chọn nhiều mục,
- SelectedValue sẽ trả về giá trị mục chọn đầu tiên.
Items.Add() Items.Add()
Items.Insert(,) Items.Insert(,)
Items.Count
Items.Contains()
Items.Remove() Items.Remove()
Items.RemoveAt()
Items.Clear
Điều khiển danh sách lstKhu_dl: SelectionMode=Multiple, Rows=4
Private Sub Page_Load(…) Handles MyBase.Load If Not IsPostBack Then lstKhu_dl.Items.Add("Vịnh Hạ Long") lstKhu_dl.Items.Add("Phan Thiết - Mũi Né") lstKhu_dl.Items.Add("Nha Trang") lstKhu_dl.Items.Add("Đà Lạt") End If End Sub Private Sub butChon_dia_diem_Click(…) …… Dim i As Integer lblDia_diem.Text = "" For i = 0 To lstKhu_Dl.Items.Count - 1 If lstKhu_dl.Items(i).Selected Then lblDia_diem.Text &= lstKhu_dl.Items(i).Text() & "" End If Next End Sub
GroupName (RadioButton): Tên nhóm. Thuộc tính này được sử dụng để nhóm các điều khiển RadioButton lại thành 1 nhóm.
Danh sách các điều khiển
Hai điều khiển này được dùng để tạo ra một nhóm các CheckBox/Radio Button. Do đây là điều khiển danh sách nên nó cũng có thuộc tính Items chứa tập hợp các mục chọn như ListBox/DropDownList. Các thao tác trên tập hợp Items, xử lý mục chọn cũng tương tự như ListBox/DropDownList.
Private Sub rblThu_nhap_SelectedIndexChanged(…)… lblThu_nhap.Text = "Bạn chọn thu nhập: " & _ rblThu_nhap.SelectedItem.Text End Sub
Liên kết dữ liệu với Sortedlist
Private Sub Page_Load(…) Handles MyBase.Load If Not IsPostBack Then Dim Ds_Binh_chon As New SortedList Ds_Binh_chon.Add("1", "Nhắn tin SMS") Ds_Binh_chon.Add("2", "Chụp hình") Ds_Binh_chon.Add("3", "Nghe Radio") Ds_Binh_chon.Add("4", "Nghe nhạc MP3") Ds_Binh_chon.Add("5", "Xem Video Clip") Ds_Binh_chon.Add("6", "Lưu trữ") Ds_Binh_chon.Add("7", "Ghi âm") Ds_Binh_chon.Add("8", "Chơi game") Ds_Binh_chon.Add("9", "Internet") rblBinh_chon.DataSource = Ds_Binh_chon rblBinh_chon.DataTextField = "Value" rblBinh_chon.DataValueField = "Key" rblBinh_chon.DataBind() End If End Sub Private Sub rblBinh_chon_SelectedIndexChanged(…) lblBinh_chon.Text = "Bạn chọn chức năng số " & _ rblBinh_chon.SelectedItem.Value End Sub
Trong ví dụ trên, chúng ta tạo ra một danh sách các bình chọn thông qua đối tượng SortedList. Đối tượng SortedList được dùng để lưu trữ danh sách các đối tượng và tự động sắp xếp các đối tượng đó theo giá trị của thuộc tính khóa.
Để liên kết điều khiển với một đối tượng dữ liệu (ở ví dụ này là đối tượng SortedList), ta sử dụng thuộc tính DataSource để lấy nguồn dữ liệu.
<điều khiển>.DataSource = <đối tượng dữ liệu>
Hai thuộc tính quan trọng không thể thiếu trong việc thực hiện liên kết dữ liệu đó là: DataTextField và DataValueField. DataTextField là tên thuộc tính (hoặc tên field) của đối tượng dữ liệu mà ta muốn hiển thị. DataValueField là tên thuộc tính (hoặc tên field) chứa là giá trị mà ta muốn nhận về khi người dùng thực hiện chọn các mục trên điều khiển (thông qua thuộc tính SelectedValue hay SelectedItem.Value).
Để hiển thị dữ liệu lên điều khiển khi trang được Load, chúng ta sử dụng phương thức DataBind.
Trong phần này chúng ta sẽ tìm hiểu về các điều khiển được dùng để kiểm tra dữ liệu.
Như các bạn đã biết, mỗi khi PostBack về Server, trang Web luôn kiểm tra tính hợp lệ dữ liệu (nếu có yêu cầu khi thiết kế). Nếu dữ liệu không hợp lệ (bỏ trống, vi phạm miền giá trị, mật khẩu nhập lại không đúng, …), trang web sẽ không thể PostBack về Server.
Minh họa thuộc tính Display: Tại ô nhập lại mật khẩu, ta có 2 điều khiển kiểm tra dữ liệu: một điều khiển kiểm tra không được phép rỗng (rfvNhap_lai), một điều khiển kiểm tra xem nhập lại mật khẩu có giống với mật khẩu đã nhập ở trên hay không.
rfvNhap_lai.Display = Static
Điều khiển này được dùng để kiểm tra giá trị trong điều khiển phải được nhập.
InitialValue: Giá trị khởi động. Giá trị bạn nhập vào phải khác với giá trị của thuộc tính này. Giá trị mặc định của thuộc tính này là chuỗi rỗng.
Điều khiển này được dùng để so sánh giá trị của một điều khiển với giá trị của một điều khiển khác hoặc một giá trị được xác định trước.
Thông qua thuộc tính Operator, chúng ta có thể thực hiện các phép so sánh như: =, <>, >, >=, <, <= hoặc dùng để kiểm tra kiểu dữ liệu (DataTypeCheck).
Lưu ý : Trong trường hợp không nhập dữ liệu, điều khiển sẽ không thực hiện kiểm tra vi phạm.
Điều khiển này được dùng để kiểm tra giá trị trong điều khiển phải nằm trong đoạn [min-max]
- MinimumValue: Giá trị nhỏ nhất.
- MaximumValue: Giá trị lớn nhất.
- Type: Xác định kiểu để kiểm tra dữ liệu. Ta có thể thực hiện kiểm tra trên các kiểu dữ liệu sau:
Điều khiển này được dùng để kiểm tra giá trị của điều khiển phải theo mẫu được qui định trước: địa chỉ email, số điện thoại, mã vùng, số chứng minh thư, …
Lưu ý: Trong trường hợp không nhập dữ liệu, điều khiển sẽ không thực hiện kiểm tra vi phạm.
Thuộc tính:
Hộp thoại Regular Expression
Bảng mô tả các ký hiệu thường sử dụng trong Validation Expression
Điều khiển này cho phép bạn tự viết hàm xử lý kiểm tra lỗi.
Sự kiện
Xử lý kiểm tra dữ liệu nhập tại điều khiển txtSoA có phải là số chẵn hay không.
Private Sub cvSo_chan_ServerValidate(…, _ ByVal args As ServerValidateEventArgs) … If Val(txtSoA.Text) Mod 2 = 0 Then args.IsValid = True Else args.IsValid = False End If End Sub
Điều khiển này được dùng để hiển thị ra bảng lỗi - tất cả các lỗi hiện có trên trang Web. Nếu điều khiển nào có dữ liệu không hợp lệ, chuỗi thông báo lỗi - giá trị thuộc tính ErrorMessage của Validation Control sẽ được hiển thị. Nếu giá trị của thuộc tính ErrorMessage không được xác định, thông báo lỗi đó sẽ không được xuất hiện trong bảng lỗi.
Sử dụng các điều khiển ValidateControl
Trong ví dụ dưới đây, chúng ta thực hiện kiểm tra dữ liệu nhập trên các điều khiển có trong hồ sơ đăng ký khách hàng.
Màn hình hồ sơ khách hàng khi thiết kế
Private Sub butDang_ky_Click(…)… lblThong_bao.Text = "Đăng ký thành công" End Sub
Các thông báo lỗi xuất hiện trên màn hình nhập liệu khi dữ liệu nhập không hợp lệ.
Các thông báo lỗi xuất hiện qua hộp thoại khi dữ liệu nhập không hợp lệ:
Tương tự như điều khiển Label, điều khiển Literal cũng được sử dụng để hiển thị chuỗi văn bản trên trang Web.
Nếu muốn hiển thị một chuỗi văn bản trên trang Web, chúng ta có thể đánh nội dung trực tiếp vào trang Web mà không cần phải sử dụng điều khiển. Chỉ sử dụng các điều khiển như Label, Literal để hiển thị khi cần thay đổi nội dung hiển thị ở phía server.
Điểm khác biệt chính giữa Label và Literal là khi hiển thị nội dung lên trang web (lúc thi hành), điều khiển Literal không tạo thêm một tag Html nào cả, còn Label sẽ tạo ra một tag span (được sử dụng để lập trình ở phía client).
Lệnh xử lý:
Private Sub Page_Load(…) Handles MyBase.Load lblLabel.Text = "Đây là chuỗi trong Label" ltrLiteral.Text = "Còn đây là chuỗi trong Literal" End Sub
Chọn chức năng từ thực đơn View | Source trên Browser:
Đây là chuỗi trong Label Còn đây là chuỗi văn bản trong Literal
Hai điều khiển Panel và PlaceHolder được sử dùng để chứa các điều khiển khác. Thuộc tính thường dùng của 2 điều khiển này là Visible. Nếu giá trị của thuộc tính này = True, các điều khiển chứa bên trong sẽ được hiển thị, ngược lại (Visible = False), không có điều khiển nào chứa bên trong được hiển thị.
Tuy nhiên, điều khiển Panel cho phép chúng ta kéo những điều khiển vào bên trong nó lúc thiết kế, còn điều khiển PlaceHolder thì không.
Để thêm những điều khiển vào bên trong lúc thi hành, chúng ta phải thực hiện thông qua tập hợp Controls của điều khiển:
Dim txtSo_A As New TextBox
pnl.Controls.Add(txtSo_A)
Điều khiển Table thường được sử dụng để hiển thị dữ liệu theo các dòng lệnh đã được cài đặt. Điều khiển này được tạo thành từ tập hợp các dòng (thông qua thuộc tính Rows) - TableRow, mỗi dòng được tạo thành từ tập hợp các ô (thông qua thuộc tính Cells) – TableCell.
Mỗi ô - cell (TableCel) trong Table có thể là một điều khiển chứa các điều khiển khác. Ta có thể thao tác với các điều khiển trong ô thông qua tập hợp Controls của ô đó
Sử dụng các điều khiển Table
Private Sub Page_Load(…, e … ) Handles MyBase.Load Ve_bang(3, 3) End Sub Public Sub Ve_bang(ByVal pSo_dong As Integer, ByVal pSo_cot As Integer) Dim r%, c% Dim tr As TableRow, td As TableCell 'Tiến hành tạo bảng dữ liệu For r = 0 To pSo_dong - 1 tr = New TableRow tr.Height = New Unit(20) For c = 0 To pSo_cot - 1 td = New TableCell If r = c Then 'Xử lý thêm các Textbox Dim txtTextbox As New TextBox txtTextbox.Text = "Dòng " & r & " cột " & c txtTextbox.BackColor = Color.Yellow txtTextbox.Width = New Unit(90) td.Controls.Add(txtTextbox) Else td.Text = "Dòng " & r & " cột " & c End If tr.Cells.Add(td) Next c tblBang.Rows.Add(tr) ext r End Sub
Điều khiển AdRotator được dùng để tạo ra các banner quảng cáo cho trang web, nó tự động thay đổi các hình ảnh (đã được thiết lập trước) mỗi khi có yêu cầu, PostBack về server.
- AdvertisementFile: Tên tập tin dữ liệu (dưới dạng xml) cho điều khiển.
Dưới đây là cú pháp của tập tin Advertisement (*.xml)
Đường dẫn đến tập tin hình ảnh
Đường dẫn đến liên kết
Chuỗi văn bản được hiển thị như Tooltip
Từ khóa dùng để lọc hình ảnh
Tần suất hiển thị của hình ảnh
Lưu ý : Phải nhập đúng các giá trị trong tag như mẫu trên. Các giá trị trong tag có phân biệt chữ Hoa chữ thường.
Trong đó
Giá trị của tham số này mặc định không được thiết lập Î Hiển thị tất cả những hình có trong tập tin XML. Trong trường hợp nếu không có hình nào có giá trị Keyword bằng giá trị của thuộc tính này, sẽ không có hình nào được hiển thị.
- AdCreated:Xảy ra khi điều khiển tạo ra các quảng cáo.
Tạo Quảng cáo sử dụng điều khiển AdRotator
Bước 1. Thiết kế giao diện
Bước 2. Tạo tập tin dữ liệu: Hinh.xml
Hinh\Asp_net.jpg http://www.asp.net Trang chủ Asp.net Hoc_tap 10
Nhập thông tin hình ảnh quảng cáo
Bước 3. Thiết lập thuộc tính cho điều khiển adQuang_cao
Bước 4. Thi hành ứng dụng
Một điều chắc chắn rằng điều khiển Calendar đã quá quen thuộc với các bạn lập trình ứng dụng trên windows, nó có giao diện trực quan, vì vậy, người dùng có thể chọn ngày dễ dàng.
- SelectionChanged: Xự kiện này xảy ra khi bạn chọn một ngày khác với giá trị ngày đang được chọn hiện hành
- VisibleMonthChanged: Xự kiện này xảy ra khi bạn chọn tháng khác với tháng hiện hành
Private Sub Page_Load(…) Handles MyBase.Load lblHom_nay.Text = "Hôm nay ngày " & Date.Today.ToString("dd/MM/yyyy") End Sub Private Sub calLich_SelectionChanged(…) Handles… Dim lSo_ngay As Integer lSo_ngay = Math.Abs(DateDiff(DateInterval.Day, Date.Today, calLich.SelectedDate)) If calLich.SelectedDate > Date.Today Then lblThong_bao.Text = "Còn " & lSo_ngay & _ ngày là đến ngày sinh nhật của bạn." ElseIf calLich.SelectedDate = Date.Today Then lblThong_bao.Text = "Hôm nay là ngày sinh nhật của bạn" Else lblThong_bao.Text = "Sinh nhật bạn đã qua " & lSo_ngay & " ngày." End If End Sub
Đối tượng ViewState được cung cấp để lưu lại những thông tin của trang web sau khi web server gởi kết quả về cho Client. Mặc định, các trang web khi được tạo sẽ cho phép sử dụng đối tượng ViewState thông qua thuộc tính EnableViewState (của trang web) = True.
Gán giá trị cho ViewState:
ViewState("Tên trạng thái") =
Nhận giá trị từ đối tượng ViewState:
= ViewState("Tên trạng thái")
Private Sub Page_Load(…) Handles MyBase.Load If Not IsPostBack Then ViewState("So_lan") = 0 Else ViewState("So_lan") += 1 End If lblTB.Text = "Số lần Postback: " + CStr(ViewState("So_lan")) End Sub Private Sub butDem_Click() Handles butDem.Click lblTB.Text = "Số lần Postback: " + CStr(ViewState("So_lan")) End Sub
Về bản chất, các giá trị trong đối tượng ViewState được lưu trong một điều khiển hidden và các giá trị này đã được mã hóa. Đối tượng ViewState giúp chúng ta giảm bớt công sức trong việc lưu trữ và truy xuất các thông tin mà không phải sử dụng nhiều điều khiển hidden.
Chọn chức năng View | Source từ browser
Kinh nghiệm giảng dạy:
Cũng giống như các điều khiển cơ bản trên winform, các điều khiển cơ bản trên webform cũng là một thành phần không thể thiếu của một ứng dụng web.
Giáo viên cần hướng dẫn cho học viên sử dụng các điều khiển này thông qua các bài tập thực hành (tài liệu đính kèm). Ngoài những bài tập đã có trong tài liệu, giáo viên có thể soạn bổ sung thêm những bài tập khác (mở rộng hơn) phù hợp với khả năng của lớp mình phụ trách.