Giáo trình ASP.NET cơ bản

doc 182 trang hapham 460
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình ASP.NET cơ bản", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • docgiao_trinh_asp_net_co_ban.doc

Nội dung text: Giáo trình ASP.NET cơ bản

  1. Chương I. Giới thiệu chung về cấu trúc ASP.NET Framwork 6 1.1. ASP.NET và .NET FRAMEWORK 6 1.1.1 Hiểu về Framework Class Library 6 1.1.2 Hiểu về Commom Language Runtime(CLR) 7 1.2 giới thiệu về VS 2005 7 1.2.1 Giới thiệu 7 1.2.2 Hiểu về các điều khiển trên Asp.net 9 1.2.3 Hiểu và điều khiển sự kiện trên server 10 1.2.4 Hiểu về View State 10 1.3 Trang asp.net 12 1.3.1 Hiểu về Biên dịch động 12 1.3.2 Hiểu về Control Trees 12 1.3.3 Sử dụng Code-Behind 13 1.3.4 Điều khiển sự kiện của trang asp.net 14 1.3.5 Hiểu về Request, Response 16 Chương II. Cơ bản về lập trình C# lập trình trong trang ASP.NET 17 2.1 Kiểu dữ liệu 17 2.2 khai báo biến 18 2.3.2, Sử dụng trình bày switch case 19 2.3.3. Sử dụng trình bày for 19 2.3.4 Sử dụng trình bày while 20 2.3.5 Sử dụng trình bày do while 20 2.3.6 Sử dụng trình bày break (để thoát khỏi vòng lặp) 20 2.3.7 Sử dụng trình bày continue. 20 2.3.8 Sử dụng trình bày return(được sử dụng trong các hàm để trả về giá trị cụ thể cho hàm) 21 2.3.9 Sử dụng trình bày goto 21 2.4. Trang asp.net 21 2.4.1 Viết code C# trong file .aspx: 21 2.4.2 Viết code trong trang code behind 22 2.4.2 Tạo một lớp thư viện 23 2.5. Cơ bản về lớp trong C# 27 2.5.1 Khai báo Field và thuộc tính 27 2.5.2 Phương thức khởi dựng của lớp 28 2.5.3 Overloading phương thức 29 2.5.4 Khai báo không gian tên (Namespaces) 31 2.5.5 Lớp Partial 33 2.5.6 Kế thừa và trừu tượng hoá một lớp 35 2.5.7 Khai báo Interface: 37 Chương III. Sử dụng các điều khiển Cơ bản 39 3.1. Điều khiển hiển thị thông tin 39 3.1.1. Label 39 3.1.2. Điều khiển Literal 40 3.2. Điều khiển cho phép người dùng nhập liệu 40 3.2.1 Điều khiển TextBox 40 3.2.2. Sử dụng điều khiển CheckBox 41 3.2.3. Điều khiển RadioButton 42 3.3. Submitting Form Data 43 3.3.1. Điều khiển Button 43 3.3.2. Điều khiển LinkButton: 44 3.3.3. Điều khiển ImageButton 44 3.3.4. Sử dụng Client Scripts với điều khiển Button 44 3.3.5. Thực hiện chuyển trang 45 3.3.6. Chỉ định một Button mặc định 46 3.3.7. Điều khiển Command Event 47 3.4. Điều khiển hiển thị ảnh 48 3.4.1. Điều khiển Image. 48 3.4.2. Điều khiển ImageMap 50 3.5. Điều khiển Panel 51 3.6. Điều khiển HyperLink 53 Chương IV Sử dụng các điều khiển Validation 54 4.1 RequiredFieldValidator 55 4.1.1 Ý nghĩa 55 4.1.2 Ví dụ 55 4.2 Điều khiển CompareValidator 56 4.2 Ý nghĩa 56 4.2.1 Cách sử dụng 56 4.2.2 Ví dụ 56 4.3. Điều khiển RegularExpressionValidator 57 1
  2. 4.3.1 ý nghĩa 57 4.3.2 Cách sử dụng 57 4.3.2 Ví dụ 58 4.4 Điều khiển CompareValidator 59 4.4.1 ý nghĩa 59 4.4.4. Cách sử dụng 59 4.5 Điều khiển CustomValidator 61 4.5.1 ý nghĩa 61 4.5.2 Cách sử dụng và Ví dụ 61 4.6. Điều khiển ValidationSummary 64 4.6.1. ý nghĩa 64 4.7 Tạo các điều khiển kiểm tra tính hợp lệ theo ý mình 67 Chương 5. Sử dụng các Rich Control 70 5.1 File Upload 70 5.2 Điều khiển Calendar 73 5.3 Điều khiển Advertisements(Trình bày quảng cáo - Adrotator) 78 Chương 6 Thiết kế Website với MasterPage 83 6.1 Tạo MasterPage 83 6.2 Sử dụng FindControl trong MasterPage. 85 6.2.1 Trang Findcontrol.master 85 6.2.2 Trang Findcontrol.aspx 86 6.2.3 Trang Expose.master 87 6.2.4 Trang Expose.aspx 87 6.3 Load một MasterPage động 88 Chương 7. Thiết kế Website với themes 90 7.1 Thêm Skin vào trong themes 90 7.2 Đăng ký Themes với web.config 93 7.3 Đưa nhiều CSS vào 1 Themes 95 7.4 Load một Theme động 95 Chương 8 xây dựng và sử dụng user control 97 8.1 Tạo User control 97 8.2 Sử dụng User Control 98 8.3 Load một User Control trong thực thi của trang 100 Chương 9 Điều khiển ADO.NET 104 9.1 Kiến trúc ADO .Net 104 9.2 Đối tượng Connection 109 9.1.1 Thuộc tính: 110 9.1.2 Phương thức của đối tượng Connection 110 9.3 Đối tượng SqlCommand 110 9.4 Đối tượng SqlDataReader 111 9.5 Đối tượng DataAdapter 111 9.6 Đối tượng Dataset và DataTable 112 9.7 Ví dụ 116 Chương 10. Sử dụng ListControl 129 10.1 Xây dựng các lớp thư viện dùng chung 129 10.2 Điều khiển DropdownList 135 10.3 Sử dụng điều khiển RadiobuttonList 136 10.4. Sử dụng điều khiển ListBox 138 10.5 Sử dụng điều khiển CheckBoxList 140 10.6. Sử dụng điều khiển BulletedList 142 Chương 11. Sử dụng điều khiển GridView 144 11.1. Tạo một GridView đơn giản 144 11.2. Sorting Data 145 11.3. Paging Data 145 11.4. Hiển thị dữ liệu trống: 150 11.5. Sử dụng Fields với điều khiển GridView 151 11.2 Sử dụng CheckBoxFields 153 11.3 Sử dụng CommandFields 154 11.4 Sử dụng ButtonFields 155 11.6 Sử dụng ImageFields 157 11.7 Sử dụng TemplateFields 158 Chương 12 Sử dụng DetailView và FormView 159 12.1 DetailView 159 12.1.1. Hiển thị dữ liệu với DetailView 159 12.2.2. Sử dụng Fields với điều khiển DetailView 162 12.2.3. Hiển thị DetailView với dữ liệu rỗng 163 12.2.4. Phân trang với DetailView 165 12.2.5. Cập nhật dữ liệu với DetailView 167 2
  3. Bạn có thể dùng DetailView để cập nhật dữ liệu 167 12.3 Sử Dụng Điều khiển FormView 169 12.3.1. Hiển thị dữ liệu với điều khiển FormView 170 12.3.2. Phân trang trong FormView 170 12.3.3. Thêm mới dữ liệu với FormView 172 12.3.4. Xoá dữ liệu từ đối tượng FormView 174 Chuong 13. Sử dụng Repeater và DataList 175 13.1 Sử dụng điều khiển Repeater 175 13.1.1. Hiển thị dữ liệu với Repeater 175 13.1.2. Sử dụng Template với điều khiển Repeater 176 13.1.3. Điều khiển Repeater với các sự kiện 178 13.2. Sử dụng điều khiển DataList 181 13.2.1. Hiển thị dữ liệu với DataList 181 13.2.2. Hiển thị dữ liệu trong nhiều cột 182 13.2.3. Sử dụng Template với điều khiển DataList 183 13.2.4. Chọn dữ liệu với điều khiển DataList 183 Chương 14. Cookie, Session, Profile 187 14.1. Sử dụng Cookie 187 14.1.1 Cookie làm việc như thế nào? 187 14.1. Bảo mật với Cookie 187 14.2. Làm việc với Session 191 14.2 1 Thêm dữ liệu vào Session 192 14.2.2 Lấy dữ liệu từ một Session 192 14.2.3 Lưu trữ cơ sở dữ liệu trong Session 193 14.2.4 Sử dụng đối tượng Session 193 14.3. Sử dụng Profiles 195 Chương 15. Cấu hình và Triển khai ứng dụng 201 15.1 Cấu hình ứng dụng 201 15.1.1 Tổng quan về cấu hình website 201 15.1.2 Sử dụng công cụ quản trị website 202 15.1.3 Sử dụng giao diện snap-in quản lý ASP.NET Framework 204 15.1.4 Áp dụng các thiết lập cấu hình cho đường dẫn riêng 205 15.1.5 Khoá các thiết lập cấu hình 206 15.1.6 Thêm vào cấu hình ứng dụng tuỳ biến 207 15.1.7 Sử dụng cấu hình API 208 15.1.8 Đọc các phần cấu hình từ ứng dụng hiện tại 209 15.1.9 Mở một file cấu hình 212 15.1.10 Sử dụng lớp Configuration 213 Giáo trình ASP.NET Cơ bản Chương I. Giới thiệu chung về cấu trúc ASP.NET Framwork 1.1. ASP.NET và .NET FRAMEWORK ASP.NET là một phần của .NET FrameWork Để xây dựng trang asp.NET bạn cần thêm vào các đặc tính của .netframework. NetFrameWork chứa đựng hai phần FrameWork Class Library và Commom Language Runtime. 1.1.1 Hiểu về Framework Class Library Framework chứa đựng hàng nghìn lớp mà bạn có thể sử dụng trong ứng dụng của mình. Ví dụ một vài lớp của .Net Framework -Lớp File: cho phép bạn tạo file, sửa, xoá hay kiểm tra sự tồn tại của file trên đĩa cứng -Lớp Graphics: Cho phép bạn làm việc với nhiều kiểu của ảnh, bạn cũng có thể tạo ra các ảnh từ các phương thức trên lớp này. -Lớp SmtpClient: Cho phép bạn gửi thư. Hiểu về Namespaces: hơn 13 nghìn lớp trong Netframework. Đây là một con số rất lớn, Microsoft đã chia các lớp cùng xử lý về một vấn đề gì đó vào các không gian tên chung hay namespaces. Một Namespace đơn giản là một danh mục, ví dụ tất cả các lớp thao tác với File và thư mục chúng ta đưa vào một namespaces chung gọi là System.IO, hay tất cả các lớp làm việc với SqlServer có thể đưa vào namespace System.Data.SqlClient. Các namespaces chung nhất trong net: 3
  4. . System . System.Collections . System.Collections.Specialized . System.Configuration . System.Text . System.Text.RegularExpressions . System.Web . System.Web.Caching . System.Web.SessionState . System.Web.Security . System.Web.Profile . System.Web.UI . System.Web.UI.WebControls . System.Web.UI.WebControls.WebParts Hiểu và Assembly: Một Assembly là một file dll trên đĩa cứng của bạn, nơi mà lưu trữ các lớp của .NET, ví dụ tất cả các lớp trong .ASP.NET Framework đều nằm trong Assembly System.web.dll. Có hai kiểu Assembly: Private và shared, Một Assembly Private có thể chỉ được sử dụng trong một ứng dụng đơn. Một Assembly Shared có thể được sử dụng trong tất cả các ứng dụng trên một server chỉ định. Assembly Shared được định vị trong Global Assembly Cache(GAC). Ví dụ, Assembly System.Web.dll và tất cả các assembly khác chứa đựng trong .Net Framework được định vị trong GAC. Trước khi sử dụng các lớp trong dll bạn cần tạo một tham chiếu đến file dll này. 1.1.2 Hiểu về Commom Language Runtime(CLR) Phần thứ 2 của NetFramework là CLR chịu trách nhiệm về thực thi mã ứng dụng của bạn. Khi bạn viết ứng dụng bằng ngôn ngữ C#, VB.NET hay bằng một ngôn ngữ bất kỳ trên nền NetFramwork mã của bạn sẽ được không bao giờ biên dịch trực tiếp thành mã máy. Thay vào đó chúng được biên dạng sang ngôn ngữ đặc tả MSIL (Microsoft intermediate Language). MSIL nhìn rất giống với ngôn ngữ hướng đối tượng Assembly, nhưng không giống kiểu ngôn ngữ Assembly. MSIL là ngôn ngữ bậc thấp và phụ thuộc vào Platform. Khi ứng dụng của bạn thực thi, mã MSIL là “just in time” biên dịch sang mã máy bởi JITTER(just in time compiler) và .Net Framework chỉ hiểu một ngôn ngữ: MSIL, nên bạn có thể viết ứng dụng trên bất kỳ ngôn ngữ nào hỗ trợ .NET như C#, VB.NET hay C++, Vì vậy bạn có thể viết assembly trên bất cứ ngôn ngữ nào trên nền .NET, bạn có thể sử dụng assebly đó trong các ngôn ngữ khác khi bạn viết trên nền .NET. 1.2 Giới thiệu về VS 2005 1.2.1 Giới thiệu Trong giáo trình này chúng ta sẽ học ASP.NET trên IDE VisualStdio2005(Bạn có thể sử dụng Viusal Web Develop 2005 ). Để tạo một Website mới bạn khởi động VS. giao diện của nó sẽ hiện ra như sau: Trong Box Recent Project bạn chọn “Web site ” ở dòng Create 4
  5. Hình 1 Hộp thoại New Website hiện ra bạn chọn ASP.NET WebSite rồi chọn thư mục bạn để Website và ngôn ngữ kịch bản để bản viết Web và nhấn OK Hình 2 VS sẽ tạo ra một website với tên của Website là tên bạn vừa đặt và mặc định sẽ có một trang Default.aspx như hình sau: 5
  6. Hình 3 1.2.2 Hiểu về các điều khiển (Control) trên Asp.net Các điều khiển asp.net là phần quan trọng nhất trong ASP.NET Framework. một Control ASP.NET là một lớp mà thực thi trên server và đưa ra nội dung trên trình duyệt. ASP.NET có hơn 70 control mà bạn có thể sử dụng trong xây dựng ứng dụng web của bạn và cơ bản nó chia ra các nhóm control sau: Standard control: bao gồm các điều khiển đưa ra các thành phần chuẩn của form như: Label, Button, TextBox Validator Control: là các control cho phép bản kiểm tra tính hợp lệ của các control cho phép nhập giá trị trên form. Rich Control: là những điều khiển như FileUpload, Calendar Data Control là các điều khiển cho phép thao tác với dữ liệu Navigation Control: là những điều khiển giúp bạn dễ dàng di chuyển giữa các trang trong website. Login control: Là các điều khiển về bảo mật của ứng dụng cho phép bạn đưa ra các form đăng nhập, thay đổi mật khẩu HTML Control: cho phép bạn chuyển các điều khiển của HTML thành các điều khiển có thể làm việc trên server. Cách khai báo sử dụng các điều khiển ASP.NET giống như khai báo thẻ trong HTML, nhưng Tất cả các điều khiển của ASP.NET đều là Control thực hiện trực tiếp với server, lên khi khai báo bạn cần thêm vào thuộc tính runat=”server”. Ví dụ: Khai báo các control, phần đầu tiên của control được khai báo với tiền tố asp chỉ định không gian tên cho điều khiển. Tất cả các điều khiển chuẩn trong ASP.NET được chứa đựng trong không gian tên System.Web.UI.WebControls. tiền tố asp miều tả không gian tên này Tiếp theo tên chứa đựng của Điều khiển được khai báo, trong trường hợp tên là TextBox, tiếp theo là khai báo ID cho Control, ID này là duy nhất trong trang aspx. 1.2.3 Hiểu và điều khiển sự kiện trên server Phần lớn các điều khiển của asp.net hỗ trợ 1 hoặc nhiều sự kiện, ví dụ điều khiển ASP.NET Button hỗ trợ sự kiện Click, khi người sử dụng nhấn chuột vào Button một sự kiện sẽ được đưa ra và công việc này được xử lý trên server. Ví dụ: Trang UnderstandEvent.aspx 6
  7. protected void btnVidu_Click(object sender, EventArgs e) { lblVidu.Text = txtVidu.Text; } Hiểu về sự kiện phía server Trong ví dụ trên gồm 3 điều khiển của ASP.NET là TextBox, Label, và Button, mỗi khi người sử dụng nhập dữ liệu vào Textbox và nhấn vào Button sự kiện Button1_Click được đưa ra và điền dữ liệu từ TextBox và Label. 1.2.4 Hiểu về View State Giao thức http là giao thức nền móng của WWW, là một giao thức chuẩn thực tế.mỗi lần bạn request một trang từ website, một dữ liệu mới được đưa ra, ASP.NET Framework có thể quản lý được vượt ra ngoài giới hạn của giao thức http, ví dụ bạn điền dữ liệu vào một điều khiển Label với thuộc tính Text của nó, dữ liệu này sẽ được lưu trữ qua nhiều trang web và chỉ thay đổi khi nó được gán lại giá trị. Ví dụ sau sẽ đưa một một trang asp.net trong đó gồm 2 điều khiển Button và Label(Text của nó hiển thị số đếm), mỗi lần nhấn vào Button thì giá trị của Label tăng lên 1. Ví dụ trang Understandstate.aspx: protected void Button1_Click(object sender,EventArgs e) { Label1.Text = Convert.ToString(int.Parse(Label1.Text) + 1); } 7
  8. Under Stand State Nếu bạn mở View Source code của trang Understandstate.aspx trên bạn sẽ thấy như sau: Đây là 2 file hidden trong form nó chứa giá trị Text của Label khi trang được postback nó sẽ ghi nhớ text đó và sẽ khởi tạo lại giá trị của Label khi trang Load. 1.3 Trang asp.net 1.3.1 Hiểu về Biên dịch động Khi bạn tạo một trang ASP.NET, thực tế là bạn mã nguồn cho một lớp .NET, bạn đang tạo một thực thể mới của lớp System.Web.UI.Page, thực thể chứa đựng trong một trang ASP.NET, bao gồm tất cả các mã và nội dung HTML, được biên dịch trong một lớp .NET. Khi bạn yêu cầu một trang ASP.NET, ASP.NET Framework kiểm tra một lớp .NET tương ứng với trang, Nếu lớp tương ứng này không tồn tại, ASP.NET Framework tự động biên dịch trang này trong một lớp mới và lưu trữ lớp biên dịch này trong thư mục Temporary ASP.NET theo đường dẫn: \WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files Trong các lần tiếp theo khi người sử dụng gọi trang, trang này sẽ không phải biên dịch lại, Lớp được biên dịch từ trước được thực thi và trả về giá trị cho trình duyệt. 1.3.2 Hiểu về Control Trees Bạn có thể nghĩ một trang ASP.NET là một túi của các điều khiển, Hiểu như vậy cũng chính xác, bởi vì một vài điều khiển có thể chứa đựng nhiều điều khiển con, bạn có thể nghĩ một trang ASP.NET là một cây điều khiển Ví dụ sau chứa đựng một điều khiển DropDownList và một điều khiển Button, hơn thế nữa chỉ đẫn chứa đựng thuộc tính Trace=”true”, trang này cho phép tracing Ví dụ: trang ShowControlTree.aspx Show Control Tree 8
  9. Khi mở trình duyệt nên bạn có thể nhìn thấy Control Tree hiển thị như sau: 1.3.3 Sử dụng Code-Behind Thay vì sử dụng ngay trên trang asp.net. người ta đưa ra thêm một trang gọi là Code-behind chứa các mã lệnh thực hiện trên trang asp.net. Ví dụ như phần đầu của chương khi ta tạo ra một website thì mặc định sẽ tạo ra một lớp Default.aspx và nó sẽ kèm theo một trang Default.aspx.cs Trang Default.aspx Default Trang Defautl.aspx.cs using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; 9
  10. using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } } Code-Behind làm việc như thế nào: Trong phiên bản trước của ASP.NET Framework(ASP.NET 1.x) hai lớp được phát sinh bởi một trang aspx, một lớp miêu tả trang trình bày nội dung, và một lớp miêu tả tới file code- behind các lớp này quan hệ với nhau thông qua kế thừa lớp trang miêu tả được kế thừa từ lớp code-behind. vấn đề ở đây là việc kết hợp giữa trang trình bày và code-behind rất dễ bị phá hỏng. Trong phiên bản mới ASP.NET 2.0 Framework sử dụng các lớp Partial để tạo quan hệ giữa trang trình bày và lớp code-behind, Với lớp Partial cho phép bạn khai báo một lớp trong nhiều file khác nhau, khi biên dịch một lớp được phát sinh từ tất cả các lớp Partial 1.3.4 Điều khiển sự kiện của trang asp.net Khi bạn yêu cầu một trang ASP.NET các tập hợp các sự kiện riêng được đưa ra trong một dãy riêng, dãy các sự kiện này được gọi trong vòng đời thực thi của trang. Khi chạy trang asp.net thì vòng đời của trang asp.net gồm các sự kiện 1.PreInit 2. Init 3. InitComplete 4. PreLoad 5. Load 6. LoadComplete 7. PreRender 8. PreRenderComplete 9. SaveStateComplete 10. Unload 99% bạn không sử dụng các sự kiện này trừ hai sự kiện Load và PreRender, sự khác nhau giữa hai sự kiện này là sự kiện Load xảy ra trước khi sự kiện của Control và sự kiện PreRender xảy ra sau khi sự kiện của Control. Ví dụ sau đây sẽ chỉ ra sự khác nhau giữa sự kiện Load và PreRender. Trang ShowPageEvents.aspx void Page_Load(object sender, EventArgs e) { lblResult.Text += "Page Load "; } void btnSubmit_Click(object sender, EventArgs e) { 10
  11. lblResult.Text += "Nút nhấn được nhấn "; } void Page_PreRender() { lblResult.Text += "Page PreRender "; } Show Page Events Kết xuất chương trình Trang trước khi Nhấn nút “Submit” Trang sau khi nhấn nút “Submit” Sử dụng thuộc tính Page.IsPostBack Với sự kiện Load của trang thì khi tải trang nên thì có một sự kiện nào đó được đưa ra, và có nghĩa mỗi lần load lại trang nó lại thực hiện công việc đó, còn nếu ta đưa thêm vào thuộc tính Page.IsPostBack thì ta có thể điều khiển được sự kiện nào được thực hiện và sự kiện nào không khi trang đựơc tải lại. 1.3.5 Hiểu về Request, Response a. đối tượng Request: là một thực thể của lớp SystemSystem.Web.HttpRequest. Nó lấy về giá trị từ một tham số được truyền trong URL khi trang web được tải. Nó chứa đựng tất cả các tham số URL và tất cả các thông tin khác từ trình khách. Bảng sau sẽ đưa ra một số thuộc tính chung nhất của lớp HttpRequest 11
  12. Thuộc tính Miêu tả AnonymousID ApplicationPath and PhysicalApplicationPath Browser ClientCertificate Cookies FilePath and CurrentExecutionFilePath Form Headers and ServerVariables IsAuthenticated and IsSecureConnection IsAuthenticated and IsSecureConnection IsLocal QueryString Url and UrlReferrer UserAgent UserHostAddress and UserHostName UserLanguages b. Đối tượng Response Là một thực thể của lớp System.Web.HttpResponse và nó miêu tả giá trị trả về từ webserver từ yêu cầu của webclient. HttpResponse cung cấp các chức năng quan trọng như thuộc tính Cookie, và phương thức Redirect(). Phương thức Redirect() cho phép bạn chuyển từ trang hiện tại sang trang khác ví dụ: Response.Redirect(“TrangTieptheo.aspx”). Chương II. Cơ bản về lập trình C# lập trình trong trang ASP.NET 2.1 Kiểu dữ liệu. C# đưa ra các kiểu dữ liệu dựng sẵn rất tiện ích, phù hợp với một ngôn ngữ lập trình hiện đại. Bảng sau đây sẽ miêu tả một số kiểu dữ liệu chính trong C# Kiểu C# Kiểu .Net Số Byte Mô tả byte Byte 1 số nguyên không dấu từ 0 đến 255 char Char 2 Kiểu ký tự Unicode bool Boolean 1 Giá trị true/false sbyte Sbyte 1 Số nguyên có dấu, từ -128 đến 127 short Int16 2 Số nguyên có dấu từ -32768 đến 32767 12
  13. ushort Int16 2 Số nguyên không dấu từ 0 đến 65.535 int Int32 4 Số nguyên có dấu –2.147.483.647 đến 2.147.483.647 uint Int32 4 Số nguyên không dâu 0 đến 4.294.967.295 float Single 4 kiểu dấu chấm động, giá trị xấp xỉ từ 3,4E-38 đến 3,4E+38, với 7 chữ số có nghĩa. Double Double 8 Kiểu dấu chấm động có độ chính xác gấp đôi, giá trị xấp xỉ từ 1,7E-308 đến 1,7E+308, với 15,16 chữ số có nghĩa Decimal Decimal 8 Có độ chính xác đến 28 con số và giá trị thập phân, được dùng trong tính toán tài chính, kiểu này đòi hỏi phải có hậu tố m hoặc M kèm theo sau. 2.2 khai báo biến Cú pháp: Kiểu Tên_biến; Ví dụ: string giatri_chuoi; int giatri_nguyen; chú ý: biến có thể bao gồm các chữ cái, chữ số(không được đứng đầu) và ký tự _ (nối) biến trong C# phân biệt chữ hoa và chữ thường. 2.3. Sử dụng các trình bày 2.3.1. trình bày if – if else Khi bạn cần kiểm tra một điều kiện nào đó trước khi thực hiện công việc, hoặc kiểm tra điều kiện nếu đúng thì làm việc còn khác thì không làm bạn có thể dùng trình bày if – if else cú pháp: if(điều_kiên) { //thực hiện công việc } if(điều_kiên) { // thực hiện công việc 1 } else { //thực hiện công việc 2 } Lưu ý bạn có thể dùng nhiều cặp if – else lồng nhau: Ví dụ: Vd1 13
  14. int a=5; int b=5; if (a == b) Response.write(“Gia tri cua a bang gia tri b”); Vd2 if (1 > 2) MessageBox.Show("1>2"); else MessageBox.Show("2>1"); 2.3.2, Sử dụng trình bày switch case Khi công việc có nhiều lựa chọn và tuỳ vào từng trường hợp để bạn đưa ra công việc phù hợp với điều kiện đưa vào bạn có thể dùng trình bày switch case. Ví dụ: string giatri = Request.QueryString["abc"]; switch (giatri) { case "a": //thuc hien cong viec a break; case "b": //thuc hien cong viec b break; default: //thuc hien cong viec mac dinh break; } 2.3.3. Sử dụng trình bày for Ví dụ string giatri; for (int i = 0; i < 10; i++) giatri += i.ToString(); MessageBox.Show(giatri); Khi làm việc với mảng hay trong trường hợp thực hiện một công việc trong khoảng nào đó chúng ta có thể dùng trình bày for. 2.3.4 Sử dụng trình bày while thực hiện công việc trong khi điều kiện đúng Ví dụ int i = 0; while (i < 5) { Console.WriteLine(i.ToString()); i++; } 2.3.5 Sử dụng trình bày do while ngược lại với while – do while làm việc cho đến khi điều kiện đúng thì thoát. Ví dụ int i = 0; do 14
  15. { MessageBox.Show(i.ToString()); i++; } while (i 2 ) { MessageBox.Show(j.ToString()); continue; } } 2.3.8 Sử dụng trình bày return(được sử dụng trong các hàm để trả về giá trị cụ thể cho hàm) Ví dụ public int sum(int a, int b) { return a + b; } 2.3.9 Sử dụng trình bày goto. Ví dụ int i = 0; int j = 0; while (i < 5) { i++; j++; if (j == 2) goto jumpeddoutofloop; } 15
  16. jumpeddoutofloop: Console.WriteLine("I jumped out"); 2.4. Trang asp.net Trang asp.net có đuôi mở rộng là .aspx và kèm theo một lớp phục vụ ẩn đằng sau(Code behind). Để viết code C# trong trang asp.net ta có thể khai báo và sử dụng trực tiếp trong trang asp.net, trong file code behind, hoặc từ một thành phần thư viện và ta gọi vào. 2.4.1 Viết code C# trong file .aspx: về cơ bản bạn dùng các các thẻ sau - bạn có thể khai báo biến hoặc viết các hàm, lớp trong thể này, - với thẻ này bạn dùng để gọi giá trị của biến hay của 1 hàm nào đó, - lấy giá trị dùng trang các đối tượng ràng buộc dữ liệu. Đây là một ví dụ đơn giản Trang basic.aspx Basic Biến abc của bạn vừa khai báo có giá trị 2.4.2 Viết code trong trang code behind Vì trang aspnet của chúng ta kế thừa từ trang aspx.cs lên trong trang .aspx chúng ta muốn gọi dữ liệu từ biến hay hàm trong file .aspx.cs chúng ta phải khai báo với bổ ngữ truy cập protected hoặc public. Ví dụ sau: Trang codebehind.aspx 16
  17. Untitled Page Gán giá trị: Lấy giá trị từ code behind Trang codebehind.aspx.cs using System; public partial class codebehind : System.Web.UI.Page { protected string _hello; protected void Page_Load(object sender, EventArgs e) { _hello = "Hello World"; lblhello.Text = _hello; } } Trong ví dụ trên có sử dụng một điều khiển asp.net là Label các bạn sẽ được học trong chương sau, ở chương này bạn hiểu nó là một điều khiển để hiển thị dữ liệu. Bạn thấy trong phần code behind có khai báo một biến _hello kiểu string và bổ ngữ truy cập là protected trong sự kiện Page_Load(khi trang được tải lên) chúng ta gán _hello = "Hello World"; và sau đó gán giá trị cho Label bằng giá trị của _hello. Còn trong trang .aspx chúng ta có sử dùng thẻ để lấy giá trị của _hello để in ra màn hình. 2.4.2 Tạo một lớp thư viện Để tạo một lớp thư viện phục vụ cho trang asp.net bạn có thể tạo một thành phần thư viện động dll rồi tạo tham chiếu đến dll đó để sử dụng(copy dll đó vào thư mục bin - chúng ta sẽ học nó trong phần asp.net nâng cao). Trong ứng dụng web ASP.NET Framework có một ASP.NET FOLDER tên App_Code cho phép chúng ta viết các lớp thư viện ở đây và có thể sử dụng trong các trang của ứng dụng web. để tạo thư mục App_code bạn làm theo các bước sau đây: bước 1: nhấn chuột phải vào Solution và chọn theo đường dẫn của ảnh dưới đây. 17
  18. Trong ứng dụng web của chúng ta sẽ thêm vào một thư mục App_code tại đây chúng ta có thể viết vào các lớp thư viện. Để tạo một lớp thư viện trong thư mục này chúng ta nhấn chuột phải vào thư mục App_code rồi chọn Add New Item Form Add New Item hiện ra 18
  19. Bạn chọn Class và trong hộp TextBox Nam bạn nhập tên lớp muôn tạo và nhân nút Add. a, Định nghĩa lớp: Khai báo: [Thuộc tính] [bổ sung truy cập] Class [Tên lớp] : [Lớp cơ sở] { //các biến, phương thức hay thuộc tính của lớp } Ví dụ: Lớp HelloWorld.cs class HelloWorld { public string SayMessage() { return "Hello World"; } } Trong ví dụ trên phương thức SayMessage sẻ về chuỗi “Hello World”. b, Sử dụng bổ ngữ truy cập Public: một lớp, một phương thức, hay thuộc tính khi sử dụng từ khoá này sẽ không bị hạn chế truy cập Protected: Lớp, Phương thức, Thuộc tính chỉ được sử dụng ở lớp này hoặc lớp được dẫn xuất. 19
  20. Internal: Một lớp, phương thức, thuộc tính Internal chỉ được truy cập trong một thành phần Assembly(file DLL). Private: Một lớp Private, phương thức hoặc thuộc tính chỉ có thể truy cập tại chính lớp đó. c, Hàm và thủ tục Bạn có thể hiểu đơn giản, hàm phải có giá trị trả về còn thủ tục như một đoạn mã chỉ thực hiện khi được chúng ta gọi. thủ tục còn được gọi là hàm không kiểu, hàm và thủ tục trong C# gọi chung là phương thức. Ví dụ hàm: public static int Sum(int _a, int _b) { return _a + _b; } Trên là một hàm dùng để tính tổng của hai số, như bạn thấy trả về dữ liệu cho hàm chúng ta dùng từ khoá return, bổ sung truy cập public có ý nghĩa hàm được sử dụng trong toàn ứng dụng, từ khoá static đây là một phương thức tĩnh lên có thể sử dụng mà không cần phải khai báo khởi tạo đối tượng Ví dụ về thủ tục public static void HelloProcedure(string _bien) { System.Web.HttpContext.Current.Response.Write(_bien); } Sử dụng lớp HellWorld trong trang aspx của chúng ta Trang UseHelloworld.aspx Sử dụng Lớp Hello World trong thư mục App_Code Trang UseHelloworld.aspx.cs using System; public partial class UseHelloworld : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { lblHello.Text = HelloWorld.sayMessage(); } 20
  21. } Vì phương thức sayMessage trong lớp HelloWorld là một phương thức tĩnh lên ta không cần khởi tạo lớp để sử dựng. 2.5. Cơ bản về lớp trong C# 2.5.1 Khai báo Field và thuộc tính Ví dụ về Field public class HelloWorld { public string _Message; public string SayMessage() { return _Message; } } Trong đoạn mã trên bạn thấy Field _Message được khai báo kiểu string và bổ ngữ truy cập là public, và _Message được trả về giá trị bởi phương thức SayMessage(). Ví dụ về thuộc tính public class HelloWorld { public string _Message; public string Message { get { return _Message; } set { _Message = value; } } } Một thuộc tính Message được khai báo ở trên gồm 2 phương thức get trả về giá trị cho Message và phương thức set thiết lập giá trị cho Message. Thuộc tính Message ở trên là phương thức vừa đọc vừa ghi. nếu bạn xây dựng thuộc tính chỉ đọc thì bạn chỉ cung cấp phương thức get hay thuộc tính chỉ ghi bạn cung cấp cho thuộc tính đó phương thức set. 2.5.2 Phương thức khởi dựng của lớp Phương thức khởi dựng là phương thức đặc biệt của lớp, nó được gọi tự động khi khởi tạo mới lớp đó.bạn sử dụng phương thức khởi dụng để khởi tạo các private fields chứa đựng trong lớp. Phương thức khởi dựng của lớp phải trùng với tên của lớp, 1 phương thức của lớp có thể có đối số hoặc không có đối số, và có thể có nhiều phương thức khởi dựng cho lớp nhưng các đối số trong các phương thức phải khác nhau. Ví dụ: Xây dựng lớp: Construction.cs using System; public class Construction { int _giatri1; int _giatri2; public Construction() 21
  22. { _giatri1 = 0; _giatri2 = 0; } public Construction(int _giatri1, int _giatri2) { this._giatri1 = _giatri1; this._giatri2 = _giatri2; } public int Sum() { return _giatri1 + _giatri2; } } Trong lớp này chúng ta xây dựng hai phương thức khởi dựng một phương thức không có đối số và một phương thức có đối số, và một hàm tính tổng của 2 giá trị nó được sử dụng trang trang asp.net như sau: Trang UseConstruction.aspx Sử dụng phương thức khởi dựng của lớp Trang UseConstruction.aspx.cs using System; public partial class UseConstruction : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Construction construc = new Construction(5, 6); lblhello.Text = "Giá trị là: " + construc.Sum().ToString(); } } 22
  23. 2.5.3 Overloading phương thức Khi một phương thức được overloaded có nghĩa là hai phương thức có tên trùng nhau nhưng các đối số của nó phải khác nhau. Khi trong lớp của bạn có các phương thức overload thì bạn gọi hàm VS sẽ xuất hiện như sau để bạn có thể dễ dàng chọn được phương thức mình cần gọi. Ví dụ: Bạn tạo một lớp Lớp UseOverload.cs using System; public class UseOverload { public static int Sum(int a, int b) { return a + b; } public static int Sum(int a, int b, int c) { return a + b + c; } public static int Sum(int a, int b, int c, int d) { return a + b + c + d; } } Trong lớp này gồm 3 hàm tính tổng lần lượt được đưa vào 2,3,4 đối số Sử dụng lớp này trong trang ASP.NET Trang Overloading.aspx Untitled Page Chồng hoá phương thức tính tổng Tổng 2 số: Tổng 3 số: Tổng 4 số: 23
  24. Trang Overloading.aspx.cs using System; public partial class Overloading : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { lbl2so.Text = UseOverload.Sum(5, 5).ToString(); lbl3so.Text = UseOverload.Sum(5, 5, 5).ToString(); lbl4so.Text = UseOverload.Sum(5, 5, 5, 5).ToString(); } } Trong lớp này bạn gọi lần lượt các phương thức tính tổng với 2,3,4 đối số để truyền giá trị vào các Label tương ứng cùng tên. Kết xuất của chương trình: 2.5.4 Khai báo không gian tên (Namespaces) Nếu bạn từng lập trình java chắc hẳn bạn đã quen với khái niệm packed mà bạn để đóng gói các lớp mà bạn xây dựng có đặc tính chung(miêu tả hay xử lý vấn đề gì đó). Trong .Net cũng vậy từ khoá Namespaces cũng có nhiệm vụ như packed trong java. .Net cung cấp cho chúng ta các Namespaces như: using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; Và để sử dụng các Namespaces trong C# bạn cần sử dụng từ khoá using. Một Namespaces có thể chứa các Namespaces con, và trong Namespace con nhất chứa các lớp thành viên Ví dụ Bạn tạo ra hai lớp phép cộng và phép trừ để thực hiện các phép toán tương ứng như sau: Lớp Phepcong.cs using System; namespace TonghopIT.Tinhtoan 24
  25. { public class Phepcong { public static int Sum(int a, int b) { return a + b; } } } Và lớp Pheptru.cs using System; namespace TonghopIT.Tinhtoan { public class Pheptru { public static int Minus(int a, int b) { return a - b; } } } Như bạn thấy hai lớp này nằm trong Namespaces TonghopIT.Tinhtoan, thì TonghopIT là Namespaces lớn nhất, còn Namespaces Tinhtoan là con của TonghopIT và trong tính toán chứa các lớp Phepcong và Pheptru. Sử dụng Namespaces này trong trang asp.net Trang Namespaces.aspx Untitled Page Khai báo và sử dụng Namespaces Lớp phép cộng: Lớp phép trừ: Lớp Namespaces.aspx.cs 25
  26. using System; using TonghopIT.Tinhtoan; public partial class Namespaces : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { lblcong.Text = Phepcong.Sum(5, 5).ToString(); lbltru.Text = Pheptru.Minus(5, 5).ToString(); } } Như ví dụ trên bạn thấy chúng ta sử dụng namespace TonghopIT.Tinhtoan giống với các Namespace khác mà Microsoft cung cấp cho chúng ta. Kết xuất của chương trình 2.5.5 Lớp Partial .Net cho phép chúng ta tạo ra một lớp trong nhiều file khác nhau mỗi File cung cấp hay xử lý một công việc gì đó trên lớp đó. Ví dụ sau đây chúng ta sẽ tạo một lớp Calculator với 2 phương thức cộng và trừ nằm trên hai File khác nhau. File Calminus.cs using System; namespace TonghopIT.Tinhtoan { public partial class Calculator { public static int Minus(int a, int b) { return a - b; } } } File Calsum.cs using System; namespace TonghopIT.Tinhtoan { public partial class Calculator { public static int Sum(int a, int b) { return a + b; } } 26
  27. } Như các bạn thấy hai file Calsum và Calminus chứa đựng cùng một tên lớp Calculator và trong mỗi File chứa đựng một phương thức riêng là thành phần của lớp đó. Sử dụng lớp này hoàn toàn giống với việc sử dụng một lớp khác. File UsePartial.aspx Sử dụng lớp Partial Lớp Partial Kết quả cộng: Kết quả trừ: Và File UsePartial.aspx.cs using System; using TonghopIT.Tinhtoan; public partial class UsePartial : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { lblcong.Text = Calculator.Sum(5, 5).ToString(); lbltru.Text = Calculator.Minus(5, 5).ToString(); } } 2.5.6 Kế thừa và trừu tượng hoá một lớp Khi một lớp được kế thừa từ một lớp thứ 2 thì nó được thừa hưởng tất cả các thuộc tính và phương thức không private từ lớp thứ nhất. Kế thừa được sử dụng thông suốt trong .NetFrameWork, ví dụ trong tất cả các trang ASP.NET đều được kế thừa từ Lớp System.Web.UI.Page và tất cả các lớp trong .Net đều được dẫn xuất từ lớp cơ sở System.Object. Ví dụ sau chúng ta sẽ đưa ra 2 lớp TelevisionProduct và ComputerProduct được kế thừa từ lớp BaseProduct. Ví dụ: using System; 27
  28. public class BaseProduct { decimal _price; public decimal Price { get { return _price; } set { _price = value; } } } public class ComputerProduct : BaseProduct { string _processor; public string Processor { get { return _processor; } set { _processor = value; } } } public class TelevisionProduct : BaseProduct { bool _isDHTV; public bool isDHTV { get { return _isDHTV; } set { _isDHTV = value; } } } Trong ví dụ trên bạn thấy hai lớp ComputerProduct và TelevisionProduct được kế thừa từ lớp BaseProduct, trong lớp BaseProduct có thuộc tính Price lên hai lớp kế thừa sẽ được kế thừa thuộc tính này. Khi kế thừa từ một lớp khác, bạn có thể overload các thuộc tính và phương thức trong lớp này. Overloading một thuộc tính hay phương thức là một tiện ích khi bạn muốn thay đổi các ứng xử của phương thức hay thuộc tính đó trong lớp này. Để Overload một phương thức hay thuộc tính từ lớp cơ sở, thì thuộc tính hay phương thức này phải được đánh dấu với từ khoá vitual hay abstract của C# hay trong VB.NET là Overridable hoặc MustOverride. Ví dụ, chúng ta sẽ đưa ra hai lớp ProductBase và OnSaleProduct được kế thừa từ lớp ProductBase nhưng nó sẽ overload một thuộc tính từ lớp ProductBase. Ví dụ: using System; public class ProductBase { decimal _price; public virtual decimal Price { get { return _price; } set { _price = value; } } 28
  29. } public class OnSaleProduct : ProductBase { public override decimal Price { get{ return base.Price / 2;} set{base.Price = value;} } } Trong ví dụ trên Lớp OnSaleProduct được kế thừa từ lớp ProductBase và Override thuộc tính Price, ở lớp này muốn chỉ ra giá bằng một nửa ở lớp cơ sở. chú ý với VB.NET thì từ khoá base là MyBase. Bạn có thể dùng từ khoá abstract khi khai báo một lớp để như đánh dấu lớp này yêu cầu kế thừa. Bạn không thể tạo đối tượng một lớp trừu tượng, để sử dụng một lớp trừu tượng bạn phải dẫn xuất một lớp mới từ lớp trừu tượng và tạo đối tượng trong lớp dẫn xuất. Ví dụ: public abstract class BaseEmployee { public abstract decimal Salary { get; } public string Company { get { return "TonghopIT"; } } } public class SaleEmployee:BaseEmployee { public override decimal Salary { get { return 66.666; } } } Trong ví dụ trên bạn thấy Lớp SaleEmployee được kế thừa từ lớp BaseEmployee và Overload thuộc tính Salary. 2.5.7 Khai báo Interface: Một giao diện mà một danh sách các thuộc tính hay phương thức mà lớp kế thừa phải cài đặt. nếu một lớp cài đặt một giao diện, thì lớp này sẽ chứa tất cả các thuộc tính cũng như phương thức của giao diện này. Ví dụ: using System; public interface IProduct { decimal Price { get; } 29
  30. void SaveProduct(); } public class MusicProduct : IProduct { public decimal Price { get { return 20.99m; } } public void SaveProduct() { //Save Music Product } } public class BookProduct : IProduct { public decimal Price { get { return 23.99m; } } public void SaveProduct() { //Save Book Product } } Kết chương Trong chương này các bạn đã học cơ bản về C# và cách sử dụng mã C# trong trang ASP.NET và đặc biệt là bạn có thể xây dựng các lớp thư viện dùng trong trong thư mục App_Code, các bạn nên tham khảo thêm tài liệu MSDN để nắm rõ hơn về kiến thức C#. Trong chương tiếp theo chúng ta sẽ học về các điều khiển cơ bản trong ASP.NET Framework. 30
  31. Chương III. Sử dụng các điều khiển Cơ bản Trong chương này các bạn sẽ học các điều khiển cở bản của ASP.NET Framework, đây là những điều khiển mà bạn thường xuyên sử dụng trong ứng dụng web của mình. 3.1. Điều khiển hiển thị thông tin 3.1.1. Label Một số thuộc tính Tên thuộc tinh Ảnh hưởng BackColor Cho phép thay đổi màu nền của Label BorderColor Cho phép thiết lập đường viền của Label BorderStyle Hiển thị đường viền của Label theo các dạng Notset, None, Dotted, Dashed, Solid, Double, Groove, Ridge, Insert và OutSet. cssClass Cho phép đưa vào một lớp css Font Thiết lập thuộc tính của Font ForeColor Thiết đặt màu chữ nội dung của Label Style Cho phép gán các thuộc tính cho Label ToolTip Hiển thị nội dung khi di chuột vào điều khiển Label ID Tên của điều khiển Tuy điều khiển Label chứa đựng rất nhiều thuộc tính để kết xuất hiển thị nhưng với kinh nghiệm của mình trong quá trình thiết kế Web tôi khuyên bạn lên sử dụng thuộc tính cssClass để sử dụng một lớp css. Ví dụ: Gán thuộc tính trực tiếp Sử dụng cssClass Kết quả 3.1.2. Điều khiển Literal 31
  32. Giống với điều khiển Label bạn có thể dùng Literal để trình bày Text hoặc nội dung Html. Literal hỗ trợ một thuộc tính mà Label không hỗ trợ đó là: thuộc tính Mode gồm 3 giá trị là: Pass through, Endcode, transform. Ví dụ " Mode="PassThrough" /> " Mode="Encode" /> " Mode="Transform" /> Hiên thị: 3.2. Điều khiển cho phép người dùng nhập liệu 3.2.1 Điều khiển TextBox Bảng các thuộc tính: Thuốc tính Textmode Kiểu hiển thị của Textbox gồm 3 giá trị: SingleLine- hiển thị 1 trường nhập liệu trên 1 dòng, MultiLine- hiển thị 1 trường nhập liệu nhiều dòng, Password- hiển thị 1 trường nhập mà Text sẽ được thay thế bằng các ký tự đặc biệt AccessKey Cho pheps bạn chỉ định phím để di chuyển tới control TextBox AutoCompleteType Cho phép bạn kết hợp với một lớp autoComplete với điều khiển TextBox. AutoPostBack Cho phép gửi dữ liệu lên server khi nội dung của TextBox thay đổi. Columms Cho phép chỉ định số cột được hiển thị trong TextBox Enabled Cho phép hay không cho phép nhập liệu trên TextBox MaxLength Cho phép quy đinh độ dài của dữ liệu mà một người sử dụng có thể nhập trên TextBox ReadOnly Cho phép chỉ đưa dữ liệu ra TextBox chứ không nhập dữ liệu vào. Rows Cho phép chỉ định số dòng hiển thị trong TextBox TabIndex Cho phép chỉ định thứ tự Tab của TextBox Wrap Cho phép chỉ định có word-wraps không khi thiết lập 32
  33. thuộc tính TextMode là Multiline Điều khiển TextBox hỗ trợ phương thức và sự kiện sau: - Focus: cho phép thiết lập form khởi tạo ưu tiên tới TextBox - TextChanged: Xảy ra trên Server khi nội dung TextBox thay đổi. để sự kiện này xảy ra bạn cần thiết đặt thuộc tính AutoPostback là true. 3.2.2. Sử dụng điều khiển CheckBox Các thuộc tính AccessKey Enables you to specify a key that navigates to the TextBox contro AutoPostBack nablesyou to post the form containing the CheckBox back to the server automatically when the CheckBox is checked or unchecked Checked Cho phép bạn gán hoặc thiết đặt trạng thái chọn hay không chọn của CheckBox Enabled Cho phép hoặc không cho phép TabIndex Enables you to specify the tab order of the check box. Text Enablesyou to provide a label for the check box. TextAlign Enables you to align the label for the check box. Possible values are Left and Right. CheckBox hỗ trợ phương thức và sự kiện - Focus: Enables you to set the initial form focus to the check box. - CheckedChanged: Raisedontheserverwhenthecheckboxischeckedorunchecked. 3.2.3. Điều khiển RadioButton Điều khiển RadioButton luôn được sử dụng trong một nhóm và trong nhóm đó chỉ một RadioButton được chọn Các thuộc tính Thuộc tinh AccessKey Enablesyou to specify a key that navigates to the RadioButton control AutoPostBack Enables you to post the form containing the RadioButton back to the server automatically when the radio button is checked or unchecked Checked Enables you to get or set whether the RadioButton control is 33
  34. checked. Enabled Enables you to disable the RadioButton GroupName Enables you to group RadioButton controls TabIndex Enables you to specify the tab order of the RadioButton control. Text Enables you to label the RadioButton control. TextAlign Enablesyou to align the RadioButton label. Possible values are Left and Right. RadioButton hỗ trợ các phương thức và sự kiện - Focus: Enables youto set the initial form focus to the RadionButton control. - CheckedChanged: Raised on the server when the unchecked. 3.3. Submitting Form Data 3.3.1. Điều khiển Button Các thuộc tính: AccessKey Cho phép chỉ định phím di chuyển tới điều khiển Button. CommandArgument Cho phép bạn chỉ rõ đối số được truyền tới lệnh thực hiện. CommandName Chỉ định tên một lệnh được truyền tới trong Command Event. Enabled Cho phép vô hiệu hoá điều khiển Button OnClientClick Cho phép chỉ định đến một hàm phía client khi nhấn vào Button. PostBackUrl Cho phép trả dữ liệu lên một trang khác. TabIndex Chỉ định thứ tự tab của Button. Text Nội dung text hiển thị trên điều khiển Button. UseSubmitBehavior Cho phép sử dụng javascript để trả dữ liệu lên một form. Các phương thức và sự kiện - Focus: Cho phép thiết lập khi khơi tạo Form ưu tiên điều khiển TextBox. - Click: Xảy ra khi điều khiển Button được nhấn. - Command: Xảy ra khi điều khiển Button được nhấn. CommandName và CommandArgument được truyền qua sự kiện. 3.3.2. Điều khiển LinkButton: các phương thức và thuộc tính giống với điều khiển Button nhưng cách hiển thị của nó dưới dạng Text giống như thẻ của HTML và có thể áp dụng thuộc tính css của thể cho đối tượng LinkButton. Học viên tự tìm hiểu thêm 34
  35. 3.3.3. Điều khiển ImageButton Các thuộc tính và phương thức của điều khiển Button và thêm vào một số thuộc tính Thuộc tính ImageUrl Chỉ đến đường dẫn của ảnh ImageAlign Cho phép căn chỉnh ảnh trong ImageButton các giá trị của nó có thể là: AbsBottom, AbsMiddle, Baseline, Bottom, Left, Middle, NotSet, Right, TextTop, and Top. 3.3.4. Sử dụng Client Scripts với điều khiển Button Cả ba điều khiển Button trên đều có thuộc tính OnClientClick, bạn có thể sử dụng thuộc tính này để thực hiện mã phía Client mà bạn cần khi điều khiển Button được nhấn. Ví dụ. protected void btnDelete_Click(object sender, EventArgs e) { lblResult.Text = “All pages deleted!”; } TonghopIT Giải thích ví dụ: trên đoạn mã trên trong form gồm 2 điều khiển Button và Label. Trong điều khiển Button ta gán vào 2 sự kiện: OnClientClick phía Clien, và OnClick phía Server OnClientClick sẽ thực hiện khi người dùng phía Client nhấn vào Button, trong mã Client trình bày một hàm confirm trong javascript với mục đính hỏi người dùng xác nhận việc thực hiện nào đó “Bạn có chắc chắn?” nếu người dùng chọn OK thì Sự kiện thứ 2 OnClick sẽ được thực hiện còn nếu chọn Cancel thì sự kiện phía Server không được thực hiện. 3.3.5. Thực hiện chuyển trang 35
  36. Mặc định khi bạn nhấn vào Button nó sẽ thực hiện công việc ngay trên trang và trang của chúng ta sẽ Load lại một lần nhưng bạn có thể sử dụng thuộc tính PostBackUrl để chuyển sang một trang khác. Ví dụ bạn có một trang ButtonSearch.aspx TonghopIT Trong thuộc tính PostBackUrl của điều khiển btnSearch sẽ chuyển sang trang ButtonSearchResult void Page_Load(object sender, EventArgs e) { if (PreviousPage != null) { TextBox txtSearch = (TextBox)PreviousPage.FindControl("txtSearch"); lblSearch.Text = txtSearch.Text; } } TonghopIT 36
  37. Trong đoạn mã trên ta để ý phương thức FindControl của PreviousPage nó sẽ tìm đến Điều khiển trên trang ButtonSearch.aspx mà ta cung cấp ID của nó. 3.3.6. Chỉ định một Button mặc định. Ví dụ trên trang của bạn có nhiều điều khiển Button, khi nhập dữ liệu bạn lại quen nhập xong dữ liệu và nhấn nút Enter trên bàn phím, bạn có thể để mặc định nút cập nhật dữ liệu làm mặc định khi nhấn phím Emter. Như ví dụ dưới đây. void btnXacnhan_Click(object sender,EventArgs e) { lblThongbao.Text = txtHoten.Text; } TonghopIT 3.3.7. Điều khiển Command Event Sự khác nhau giữa Command Event và Command Click là trong Command Event bạn có thể cung cấp Command Name và Command argument Trong các ví dụ trước tôi đã lấy ví dụ về sự kiện Command Click nên bây giờ tôi sẽ lấy một ví dụ về Command Event để bạn so sánh. Ví dụ trên trang bạn có 3 điều khiển Button như ví dụ dưới đây: void hcubiuChon(object sender, CommandEventArgs e) 37
  38. { if (e.CommandName == "language") { switch (e.CommandArgument.ToString()) { case "C#": lblComandEvent.Text = "CShap"; break; case "VBNET": lblComandEvent.Text = "VB.NET"; break; case "JAVA": lblComandEvent.Text = "Java"; break; } } } TonghopIT Bạn chọn ngôn ngữ: Cả ba điều khiển Button trên đều chứa Tên lệnh và đối số lệnh và tuỳ thuộc vào đối số lệnh khác nhau để ta có thể thực hiện một công việc tương ứng. 3.4. Điều khiển hiển thị ảnh ASPNET bao gồm 2 điều khiển hiển thị ảnh. điều khiển Image và ImageMap. 3.4.1. Điều khiển Image. Điều khiển này dùng để hiển thị ảnh giống với thẻ trong HTML Các thuộc tính quan tâm Thuộc tính 38
  39. AlternateText Nội dung thay thế khi lỗi đường dẫn của ảnh DescriptionUrl Cho phép bạn cung cấp một đường dẫn đến trang miêu tả chi tiết nội dung của ảnh ImageAlign Cho phép căn chỉnh ảnh lên quan tới các thành phần HTML khác trong trang và nó có thể là các giá trị sau:AbsBottom, AbsMiddle, Baseline, Bottom, Left, Middle, NotSet, Right, TextTop, and Top. ImageUrl Đường dẫn của ảnh trên điều khiển Ví dụ void Page_Load(object sender, EventArgs e) { Random rnd = new Random(); switch (rnd.Next(3)) { case 0: Image1.ImageUrl = "Images/images1.jpg"; Image1.AlternateText = "Picture 1"; break; case 1: Image1.ImageUrl = "Images/images2.jpg"; Image1.AlternateText = "Picture 2"; break; case 2: Image1.ImageUrl = "Images/images3.jpg"; Image1.AlternateText = "Picture 3"; break; } } TonghopIT 39
  40. 3.4.2. Điều khiển ImageMap Cho phép bạn tạo bản đồ ảnh trên 1 ảnh hiển thị trên trang web mà người dùng phía Client có thể chọn vào một vùng của ảnh để thực hiện một công việc nào đó. Ví dụ void ImageMap1_Click(object sender, ImageMapEventArgs e) { switch (e.PostBackValue) { case "top": lblResult.Text = "Day la phan dau"; break; case "middle": lblResult.Text = "day la phan giua"; break; case "under": lblResult.Text = "day la phan cuoi"; break; } } TonghopIT <asp:RectangleHotSpot 40
  41. PostBackValue="under" Left="0" Top="300" Right="300" Bottom="450" AlternateText="Under" /> Các thuộc tính của ImageMap giống với Image và thêm vào hai thuộc tính đó là: - HotSpots: cho phép bạn điền tập hợp thông tin của HotSpots được chứa đựng trong điều khiển ImageMap. - HotSpotMode:Cho phép bạn chỉ định Enables you to specifythe behavior of the image map when you click a region. Possible values are Inactive, Navigate, NotSet, and PostBack. 3.5. Điều khiển Panel Khi bạn cần đưa các điều khiển trang vào một nhóm để giải thích nghĩa cho nhóm đó hoặc có thể là để ần hoặc hiện nhóm điều khi nhấn 1 sự kiện nào đó trên trang của bạn, bạn có thể dùng điều khiển panel. Một số thuộc tính của điều khiển panel mà bạn cần lưu ý là: - DefaultButton: Cho phép bạn định nghĩa một button mặc định trong panel mà button mặc định này sẽ được thực hiện khi bạn nhấn phím Enter - Direction: Cho phép bạn gán hoặc thiết đặt hướng hiển thị nội dung được đưa ra trong panel, có thể là các giá trị:NotSet, LeftToRight, and RightToLeft. - GroupingText: Cho phép bạn trình bày Panel như 1 Fieldset với một chú giải riêng biệt - HorizontalAlign: Cho phép bạn chỉ ra hướng ngang thể hiện nội dung của panel và nó có thẻ là các giá trị: Center, Justify, Left, NotSet, and Right. - ScrollBars: Cho phép bạn hiển thị scrollbars khi bạn cố định chiều cao hoặc chiều rộng của panel và nội dung trong panel vượt quá độ rộng hoặc độ cao đó, nó có thể là các giá trị: Auto, Both, Horizontal, None, and Vertical. Ví dụ void Page_Load(object sender, EventArgs e) { for (int i = 1; i < 100; i++) { buletnghenghiep.Items.Add("Nghề "+i.ToString()); } } 41
  42. void hcubiuSothich(object sender, EventArgs e) { if (chkhtsothich.Checked == true) panelsothich.Visible = true; else panelsothich.Visible = false; } void hcubiuNghenghiep(object sender, EventArgs e) { if (chkhtnghenghiep.Checked == true) panelnghenghiep.Visible = true; else panelnghenghiep.Visible = false; } TonghopIT 42
  43. 3.6. Điều khiển HyperLink Điều khiển HyperLink cho phép tạo 1 link tới trang web khác, không giống với LinkButton, HyperLink không đệ trình dữ liệu lên server. Các thuộc tính hỗ trợ Hyperlink: Enabled: Cho phép vô hiệu hoá ImageUrl: Cho pép định nghĩa ảnh cho HyperLink NavigateUrl: Chỉ định đến đường dẫn đưa ra bởi Hyper Target: cho phép mở một cửa sổ mới Text: Tạo nhãn cho HyperLink Kết chương: Trong chương này chúng ta đã học hầu hết các điều khiển cơ bản của ASP.NET, các điều khiển này được sử dụng thông dụng trong các ứng dụng web, Ở chương tiếp theo chúng ta sẽ học các điều khiển kiểm tra tính hợp lệ của điều khiển, ví dụ như kiểm tra tính hợp lệ của điện thoại, các điều khiển này rất tiện ích hữu dụng trong việc nhập dữ liệu cho ứng dụng web. Chương IV Sử dụng các điều khiển Validation Ở Chương trước chúng ta đã học về những điều khiển chuẩn của NetFrameWork2.0, chúng ta có thể dùng những điều khiển đó để thao tác với Webserver phía Server-Side, có thể để cập nhật dữ liệu. Nhưng có một tình huống đặt ra là các điều khiển đó có đảm bảo cho chũng ta cập nhật dữ liệu đúng và không xảy ra lôi?. Ví dụ trên Form của ta có trường nhập số điện thoại nhưng người sử dụng lại nhập vào là 1 dòng text như vậy sẽ gây ra lỗi nhập liệu. Với phiên bản trước của ASP.Net là asp thì để khắc phục lỗi đó chúng ta phải thực hiện viết mã JavaScript để bắt lỗi việc đó, còn với ASPNET nó đã cung cấp cho ta những điều khiển kiểm tra tính hợp lệ của các điều khiển nhập liệu trên Form. Trong chương này các bạn sẽ học về những điều khiển đó và tiếp theo là sẽ học cách mở rộng những điều khiển đó theo ý muốn của chúng ta ví dụ bạn sẽ tạo một AjaxValidator để kiểm tra nhập liệu phía Client. 6 điều khiển Validation trong netframework 2.0: RequiredFieldValidator: Yêu cầu người sử dụng nhập giá trị vào trường chỉ định trên Form RangeValidator: Kiểm tra giá trị nhập vào có nằm trong một khoảng nhỏ nhất và lớn nhất định trước hay không. CompareValidator: So sánh giá trị nhập có bằng một giá trị của trường khác trên Form hay không. RegularExpressionValidator: So sánh giá trị nhập với 1 biểu thức quy tắc nào đấy có thể hòm thư, điện thoại 43
  44. CustomValidator: Bạn có thể tuỳ chỉnh đối tượng Validator theo ý của mính ValidationSummary: cho phép hiển thị tổng hợp tất cả các lỗi trên 1 trang. 4.1 RequiredFieldValidator 4.1.1 Ý nghĩa với điều khiển này bạn có thể yêu cầu người dùng phải nhập giá trị vào 1 trường chỉ định trên Form. 4.1.2 Ví dụ Đưa điều khiển RequiredFieldValidator từ ToolBox(trong phần Validation) vào trong Form và thêm vào cho nó 2 thuộc tính ControlToValidate: chỉ đến điều khiển sẽ được kiểm tra Text(hoặc ErrorMessage): Thông báo lỗi khi kiểm tra Code 1: Trang RequiredValidator.aspx void btnAccept_Click(object sender, EventArgs e) { if (Page.IsValid) { this.lblResult.Text = txtHoten.Text; this.txtHoten.Text = ""; } } Validator 4.2 Điều khiển CompareValidator 44
  45. 4.2 Ý nghĩa Bạn có thể sử dụng CompareValidator để Kiểm tra giá trị nhập vào có nằm trong một khoảng nhỏ nhất và lớn nhất định trước hay không. 4.2.1 Cách sử dụng 4.2.2 Ví dụ Code 2: Trang CompareValidator.aspx void btnAccept_Click(object sender,EventArgs e) { if (Page.IsValid) { this.lblThongbao.Text = txtDiem.Text; } } RangeValidator Vào điểm 45
  46. Trong ví dụ trên ta dùng hai đối tượng Validator cùng kiểm tra giá trị nhập trên điều khiển txtDiem, điều khiển RequiredFieldDiem dùng đề kiểm tra và yêu cầu nhập giá trị cho txtDiem còn điều khiển RangeDiem yêu cầu nhập giá trị trong txtDiem phải nằm trong khoảng từ 0 đến 10. 4.3. Điều khiển RegularExpressionValidator 4.3.1 ý nghĩa Điều khiển RegularExpressionValidator cho phép bạn so sánh giá trị nhập tại 1 trường nào đó trên Form với một quy tắc định trước. bạn có thể sử dụng các biểu thức quy tắc để đưa ra các chuỗi mẫu như là email addresses, Social Security numbers, phone numbers, dates, currency, amounts, and product codes. 4.3.2 Cách sử dụng Bạn đưa điều khiển RegularExpressValidator vào Form của mình và thiết lập cho nó một số thuộc tính sau: ID: tên của điều khiển ControlToValidate: trỏ đến điều khiển cần kiểm tra Text(ErrorMessage): nội dung thông báo khi có lỗi ValidatorExpression: quy định mẫu nhập liệu như là hòm thư, số điện thoại 4.3.2 Ví dụ Sau đây sẽ là một ví dụ về việc yêu cầu người sử dụng phải cập nhật đúng địa chỉ của hòm thư. Code 3: trang RegularExpressionValidator.aspx void btnAccept_Click(object sender, EventArgs e) { if (Page.IsValid) { lblThongbao.Text = txtEmail.Text; } } 46
  47. RegularExpressionValidator Email: 4.4 Điều khiển CompareValidator 4.4.1 ý nghĩa Điều khiển CompareValidator có 3 kiểu khác nhau để kiểm tra giá trị nhập: Sử dụng để kiểm tra kiểu dữ liệu Sử dụng để so sánh giá trị nhập với một giá trị cố định Sử dụng để so sánh gia trị nhập với giá trị của một điều khiển khác trên Form 4.4.4. Cách sử dụng Bạn đưa điều khiển CompareValidator vào Form và thiết lập cho nó một số thuộc tính sau: ControlToValidate: điểu khiển của Form sẽ được kiểm tra ControlToCompare: Điểu khiển dùng để so sánh giá trị Text(ErrorMessage): hiển thị nội dung thông báo lỗi kho có lỗi Type: Kiểu của giá trị sẽ được so sánh Operator: Toán tử so sánh. Có thể là các giá trị: DataTypeCheck, Equal, GreaterThan, GreaterThanEqual, LessThan, LessThanEqual, NotEqual. Ví dụ Ví dụ 4 sau sẽ yêu cầu nhập vào ngày sinh, nếu người sử dụng nhập vào không đúng dữ liệu dạng ngày thì sẽ có lỗi thông báo. Code 4: Trang CompareValidator.aspx 47
  48. CompareValidator Ví dụ sau đây sẽ hướng đưa ra trường hợp với Form tạo tài khoản trên một trên Web yêu cầu người đăng ký phải nhập mật khẩu 2 lần. Code 5 trang CompareValidator 48
  49. 4.5 Điều khiển CustomValidator 4.5.1 ý nghĩa Nếu những điều khiển Validator trên chưa đủ với bạn hoặc bạn muốn tạo một Validator riêng theo ý mình, bạn có thể dụng điều khiển CustomValidator, bạn có thể kết hợp CustomValidator với một hàm. 4.5.2 Cách sử dụng và Ví dụ CustomValidator có 3 thuộc tính hay sử dụng là: ControlToValidator: điểu khiển của Form sẽ được kiểm tra Text(ErrorMessage): hiển thị nội dung thông báo lỗi kho có lỗi ClientValidationFunction: tên của một hàm client-side để thực hiện kiểm tra trên client- side CustomValidator hỗ trợ 1 sự kiện ServerValidate: Sự kiện được đưa ra khi CustomValidator thực hiện kiểm chứng. Ví dụ sau sẽ sử dụng sự kiện ServerValidate để kiểm tra độ dài của chuỗi được nhập trong điều khiển TextBox, nếu người nhập, nhập vào chuỗi có độ dài lớn hơn 20 ký tự thì điều khiển CustomValidator sẽ đưa ra thông báo lỗi. Ví dụ: Code 6 trang CustomValidator.aspx void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs e) { if (e.Value.Length > 20) e.IsValid = false; else e.IsValid = true; } CustomValidator 49
  50. Ở ví dụ 6 trong hàm “CustomValidator1_ServerValidate” Tham số thứ 2 được truyền tới sự kiện ServerValidator để xử lý. Trong thực thể của lớp ServerValidateEventArgs có hai thuộc tính Value: Giá trị của trường trên Form sẽ được kiểm chứng. IsValid: Diễn tả việc kiểm chứng cho kết quả thành công hoặc sai. Trong ví dụ tiếp theo tôi sẽ đưa ra cách sử dụng hàm kiểm chứng Client-side kết hợp với CustomValidator như thế nào, Trang này chỉ kiểm tra độ dài của chuỗi nhập vào bên trong TextBox, nhưng nó sẽ kiểm tra trên cả Server và Client. Code 7. void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs e) { if (e.Value.Length > 20) e.IsValid = false; else e.IsValid = true; } CustomValidator function valComments_ClientValidate(source, args) { if (args.Value.length > 20) args.IsValid = false; else args.IsValid = true; } 50
  51. 4.6. Điều khiển ValidationSummary 4.6.1. ý nghĩa ValidationSummary cho phép bạn liệt kê tất cả các các lỗi kiểm tra trên trang từ những điều khiển validator vào một vị trí. Điều khiển này đặc biệt tiện ích với Form có độ rộng lớn. cách sử dụng Bạn đưa điều khiển ValidationSummary vào Form và thiết lập cho nó một số thuộc tính sau: DisplayMode: Cho phép bạn chỉ rõ định dạng hiển thị lỗi, nó có thể là các giá trị như BulletList, List, và SingleParagraph. HeaderText: Cho phép bạn hiển thị tiêu đề tóm tắt cho các lỗi. ShowMessageBox: Cho hiện thị một popup thông báo ShowSummary: Cho phép bạn ẩn ValidationSummary trên trang. 4.1.1. ví dụ Code 8 Trang ValidationSummary.aspx ValidationSummary 51
  52. *(Yêu cầu) *(Yêu cầu) Code 8 Chạy ví dụ trên nếu ta không nhập dữ liệu cho các trường nó sẽ thông báo lỗi như sau: 52
  53. Cũng với ví dụ trên nếu trên điều khiển ValSummary ta thiết lập thuộc tính ShowMessageBox bằng True và ShowSummary với giá trị bằng False thì kết xuất của ví dụ thay vì hiển thị là một danh sách lỗi trên Form thì nó hiển thị một popup thông báo những lỗi trên trang. Code 9 ValidationSummary *(Yêu cầu) *(Yêu cầu) 53
  54. Kết xuất của nó: 4.7 Tạo các điều khiển kiểm tra tính hợp lệ theo ý mình. Trong phần này bạn sẽ học tạo các điều khiển tuỳ biến như thế nào. Chúng ta sẽ tạo điều khiển. đầu tiên sẽ tạo một điều khiển kiểm tra độ dài của một trường nhập liệu trên Form LengthValidator, Bạn tạo mới một Control Kiểm tra tính hợp lệ bằng cách dẫn xuât từ lớp BaseValidator. Lớp BaseValidator là lớp cơ sở cho tất cả các điều khiển Validation, bao gồm RequiredFieldValidator và RegularExpressionValidator Lớp cở sở là lớp 1 lớp phải được cài đặt mà yêu cầu bạn cài đặt một phương thức đơn. EvaluateIsValid: Trả về giá trị True khi trường kiểm tra tính hợp lệ trên Form là hợp lệ. GetControlValidationValue: Cho phép bạn điền giá trị của điều khiển sẽ được kiểm tra tính hợp lệ. Khi bạn tạo một điều khiển kiểm tra tính hợp lệ tuỳ biến, bạn override phương thức EvaluateIsValid() và trong phương thức này bạn gọi GetControlValidationValue để lấy giá trị của trường cần kiểm tra tính hợp lệ. Tạo một Điều khiển LengthValidator. Trong phần này bạn sẽ được học cách tạo một điều khiển đơn giản để kiểm tra độ dài của trường nhập liệu. Dưới đây mà mã nguồn của lớp LengthValidator.cs Code 10 LenghtValidator.cs using System; using System.Web.UI; using System.Web.UI.WebControls; namespace myControls { 54
  55. public class LengthValidator : BaseValidator { int _maximumLength = 0; public int MaximumLength { get { return _maximumLength; } set { _maximumLength = value; } } protected override bool EvaluateIsValid() { String value = this.GetControlValidationValue(this.ControlToValidate); if (value.Length > _maximumLength) return false; else return true; } } } Trong Lớp đoạn mã trên ta thấy LengthValidator được kế thừa từ lớp BaseValidator, trong lớp mới này ghi đề phương thức EvaluateIsValid. Giá trị của điều khiển được kiểm chứng được lấy về với phương thức GetControlValidationValue Và độ dài của giá trị sẽ được so sánh với thuộc tính MaximumLength. Đế sử dụng điều khiển LenghtValidator chúng ta phải đăng ký điều khiển này ở đầu trang với thẻ chỉ dẫn . nếu bạn muốn sử dụng LengthValidator cho nhiều trang bạn có thể đăng ký điều khiển này ở phần trong file Web configuration. Ví dụ sử dụng LengthValidator Code 11 Use LenghtValidator 55
  56. Chỉ dẫn , Với tiền tố TagPrefix=”Validator” và Chỉ đến Namespace=”MyControls” và sủ dụng điều khiển này giống với các điều khiển Validator khác. Chương 5. Sử dụng các Rich Control. Ở phần đầu của chương này các bạn sẽ được học sử dụng điều khiển FileUpload để cho phép chúng ta đưa các file dữ liệu lên Server, như là các file ảnh, word hay excel Ở chương này các bạn cũng được học các điều khiển khác như Calendar, AdRotator, Multiview, Wizard. 5.1 File Upload. Điều khiển FileUpload cho phép người sử dụng Upload file từ chính ứng dụng Web của mình. File sau khi Upload có thể lưu trữ ở 1 nơi nào đó có thể là trên ổ cứng hay trong Database. Điều khiển FileUpload hỗ trợ các thuộc tính sau: Thuộc tính Ý nghĩa Enable Cho phép bạn vô hiệu hoá điều khiển FileUpload. FileBytes Cho phép lấy nội dung file đã được upload như một mảng Byte. FileContent Cho phép lấy nội dung của file đã được upload theo dòng dữ liệu 56
  57. FileName Lấy tên file được Upload HasFile Trả về giá trị đúng khi File được Upload PostedFile Enables you to get the uploaded file wrapped in the HttpPostedFile object. Điều khiển FileUpload hỗ trợ các phương thức Focus: Enables you to shift the form focus to the FileUpload control. SaveAs: Cho phép bạn lưu file được upload lên hệ thống. Thuộc tính PostedFile của điều khiển FileUpload cho phép lấy thông tin từ File upload được bao bọc trong đối tượng HttpPostedFile. đối tượng này sẽ đưa thêm thông tin về Upload file. Lớp HttpPostedFile gồm các thuộc tính sau: ContentLength: Lấy về kích thước của File Upload tính theo byte ContentType: lấy kiểu MIME của File Upload FileName: cho phép lấy tên của file được upload. InputStream: Enables you to retrieve the uploaded file as a stream. Lớp HttpPostedFile chỉ hỗ trợ phương thức SaveAs: Cho phép bạn lưu file được upload lên hệ thống. Upload 1 file lên server Trong ví dụ sau bạn sẽ được học cách Upload 1 file ảnh lên đĩa cứng của Server. Code 1a. Fileupload.aspx FileUpload 57
  58. ' style="width:200px" Runat="server" /> Code 1b.Fileupload.aspx.cs using System; using System.Data; using System.IO; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void Page_PreRender() { string upload_folder = MapPath("~/Upload/"); DirectoryInfo dir = new DirectoryInfo(upload_folder); listImage.DataSource = dir.GetFiles(); listImage.DataBind(); } bool CheckFileType(string fileName) { string ext = Path.GetExtension(fileName); switch (ext.ToLower()) { case ".gif": return true; case ".png": return true; case ".jpg": return true; case ".jpeg": return true; default: return false; } } protected void Button1_Click(object sender, EventArgs e) 58
  59. { if (FileUpload1.HasFile) { if(CheckFileType(FileUpload1.FileName)) { string filepath = "~/Upload/" + FileUpload1.FileName; FileUpload1.SaveAs(MapPath(filepath)); } } } } Giải thích ví dụ trên: Trong sự kiện Button1_Click Kiểm tra có tồn tại File để Upload? Nếu đúng thì kiểm tra kiểm tra file upload có phải đúng định dạng của ảnh không bằng hàm CheckFileType nếu đúng thì sẽ thực hiện việc ghi file lên server với phương thức SaveAs của điều khiển FileUpload. 5.2 Điều khiển Calendar Bạn có thể hiển thị một lịch trên trang web của mình với điều khiển Calendar Ví dụ sau sẽ trình bày một Calendar đơn giản Code 2. Calendar Kết xuât của nó sẽ như sau: 59
  60. Các thuộc tính: Thuộc tính Ý nghĩa DayNameFormat Cho phép bạn chỉ rõ sự xuất hiện các ngày của tuần, có thể là các giá trị: FirstLetter, FirstTwoLetters, Full, Short, và Shortest. NextMonthText Chỉ định Text xuất hiện cho liên kết tháng tiếp theo NextPrevFormat Cho phép bạn chỉ rõ định dạng tháng tiếp theo và tháng trước đó, nó có thể là các giá trị: CustomText, FullMonth, và ShortMonth. PreMonthText Cho phép bạn chỉ định hiển thị text cho liên kế tháng trước đó SelectedDate Cho phép bạn lấy về hoặc thiết đặt cho ngày lựa chọn SelectedDates Cho phép bạn gán hoặc lấy về một tập các ngày được lựa chọn SelectionMode Cho phép chỉ định các ngày được lựa chọn có giá trị như thế nào, nó có thể là các giá trị sau: Day, DayWeek, DayWeekMonth, và none. SelectMonthText Cho phép hiển thị Text cho 1 tháng được chọn SelectWeekText Cho phép hiển thị Text cho 1 tuần được chọn ShowdayHeader Cho phép hiển thị tên ngày hay không trên đỉnh của điều khiển. ShowNextPrevMonth Cho phép hiển thị hay không liên kết đến tháng tiếp theo hoặc tháng trước đó. ShowTitle Cho phép bạn ẩn hay hiện Text trên thanh tiêu đề của điều khiển Calendar. TitleFormat Cho phép định dang text trên thanh tiêu đề, các giá trị của nó có thể là Month và MonthYear. TodaysDate Cho phép bạn chỉ rõ ngày hiện tại mặc định lấy ngày hiện tại trên Server. Các Sự kiện. DayRender: Raised as each day is rendered. SelectionChanged: Xảy ra khi một ngày mới, tuần mới hay tháng mới được lựa chọn. VisibleMonthChanged: xảy ra khi liên kết đến tháng tiếp theo hoặc tháng trước đó được nhấn. Ví dụ sau sẽ trình bày cách lấy thông tin khi chúng ta lựa chọn nhiều ngày trên đối tượng Calendar. Code 3a. Calendarmultiselect.aspx 60
  61. Multi select date   Code 3b. Calendarmultiselect.aspx.cs using System; public partial class Calendarmultiselect : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void btnSubmit_Click(object sender, EventArgs e) { bllresult.DataSource = calendar1.SelectedDates; bllresult.DataBind(); } } Kết xuất của ví dụ 3 61
  62. Tạo một Popup Datepicker Trong phần này bạn sẽ học cách sử dụng điều khiển Calendar kết hợp với Javacript để tạo một Pop-up Date picker như trong hình dưới đây: Code 4. popupdatepicker.aspx protected void calEventDate_SelectionChanged(object sender, EventArgs e) { txtEventDate.Text = calEventDate.SelectedDate.ToString("d"); } protected void btnSubmit_Click(object sender, EventArgs e) { lblResult.Text = "Bạn chọn: " + txtEventDate.Text; } 62
  63. Pop-up Date Picker function displayCalendar() { var datePicker = document.getElementById('datePicker'); datePicker.style.display = 'block'; } #datePicker { display:none; position:absolute; border:solid 2px black; background-color:white; } .content { width:400px; background-color:white; margin:auto; padding:10px; } html { background-color:silver; } 63
  64. 5.3 Điều khiển Advertisements(Trình bày quảng cáo - Adrotator) Cho phép bạn hiển thị các ảnh quảng cáo khác nhau trong 1 trang. bạn có thể lưu trữ các quảng cáo của bạn trong 1 file XML hoặc một bảng cơ sở dữ liệu. . Các thuộc tính Thuộc tính Ý nghĩa AdvertisementFile Cho phép bạn chỉ định đến đường dẫn file XML chứa đựng danh sách ảnh quảng cáo AlternateTextField Cho phép chỉ định đến tên của trường để hiển thị nội dung thay thế khi ảnh quảng cáo vì một lý do nào đó không hiển thị được DataMenber Cho phép ràng buộc đến một thành viên cơ sở dữ liệu của nguồn cơ sở dữ liệu DataSource Chỉ rõ cở sở dữ liệu chứa danh sách các banner quảng cáo DataSourceID Ràng buộc đến 1 cơ sở dữ liệu ImgUrlFile Chỉ rõ đến trường chứa đường dẫn banner quảng cáo KeywordFilter Cho phép bạn lọc quảng cáo bởi 1 từ khoá NavigateUrlField Chỉ rõ đến tên của trường chứa các liên kết quảng cáo Target Cho phép bạn mở ra một cửa sổ mới khi nhấn vào banner quảng cáo Sự kiện AdCreated: Xảy ra sau khi điều khiển Adrotator lựa chọn một quảng cáo nhưng trước khi điều khiển AdRotator đưa ra quảng cáo. Chú ý rằng điều khiển AdRotator chứa đựng thuộc tính KeywordFilter bạn có thể cung cấp mỗi banner quảng cáo với 1 từ khoá sau đó khi trình bày quảng cáo chúng ta có thể lọc những quảng cáo theo điều kiện để hiển thị. Ví dụ như trên trang của bạn, bạn cần trình bầy quảng cáo ở 4 vị trí trên banner(top) của trang, bên trai, phải và phía chân(bottom) của trang. Khi đó bạn gán với mỗi ảnh quảng cáo một từ khoá(ví dụ tương ứng với 1- top, 2- right, 3 – bottom, 4 - left) và khi trình bầy trong điều khiển AdRotator ta có thể dùng thuộc tính KeywordFilter để lọc và trình bày. Ví dụ 1: Trên trang web của bạn trình bầy quảng cáo ở hai vị trí(trên đầu và bên phải của trang) layout như sau 64
  65. Code 5a: AdRotatorXML.aspx AdRotator XML #wrapper {width: 782px; margin: 0 auto;} #border { border: 1px solid #8ECE5F; margin: 20px 0px 5px 0px; background-color: #ffffff; min-height: 776px; float: right; width: 780px;} #header {background-color:#BECEF5; text-align: width:782px; height:100px; center; margin: 6px 0px 0px 0px;} #right{background-color:#BECEF5; width:170px;margin: 6px 0px 0px 4px; height:300px; float:right} .box{ float:right;padding:10px; border-left:solid 1px black;} 65
  66. Nội dung File XML Code 5b. ~/Advertisement/images/banner.png 782 100 Cong ty cong nghe cao TonghopIT 50 banner ~/Advertisement/images/banner2.gif 782 100 Cong ty cong nghe cao TonghopIT 50 banner ~/Advertisement/images/anh1.gif 150 150 Box Advertisement 1 50 right ~/Advertisement/images/anh1.gif 150 150 Box Advertisement 1 66
  67. 50 right ~/Advertisement/images/anh2.gif 150 150 Box Advertisement 1 50 right ~/Advertisement/images/anh3.gif 150 150 Box Advertisement 1 50 right ~/Advertisement/images/anh4.gif 150 150 Box Advertisement 1 50 right ~/Advertisement/images/anh5.gif 150 150 Box Advertisement 1 50 right ~/Advertisement/images/anh6.gif 150 150 Box Advertisement 1 50 right Cách thực hiện bạn đưa XML có cấu trúc như code 5b, sau đó trong trang AdRotatorXML.aspx bạn đưa điều khiển AdRotator vào và đặt cho nó hai thuộc tính 67
  68. AdvertisementFile chỉ đến File XML bạn vừa tạo, và thuộc tính KeywordFilter theo thẻ Keyword trong file XML. Chương 6 Thiết kế Website với MasterPage Bạn đang gặp vấn đề thiết kế layout chung cho website của mình? MasterPage có thể là một đáp án tốt cho bạn giải quyết bài toán trên. Với MasterPage để tạo một giao diện chung nhất cho Website của mình. Ví dụ website của bạn có layout gồm 5 phần banner, footer, left, right Và content(phần chứa nội dung hiển thị cho các tin). Như vậy bạn có thể thấy trên trang web có các phần có cách trình bầy không thay đổi trong quá trình duyệt tin. banner, footer, left, right: bạn có thể để các phần này vào một MasterPage và tất các trang web trong website của bạn sẽ áp dụng layout này thông qua contentpage 6.1 Tạo MasterPage Các bước tạo MasterPage giống với tạo các trang aspx bình thường nhưng trên hộp Add New Item bạn chọn MasterPage bạn thấy dưới ô đặt tên phần mở rộng của nó sẽ là Master. Bạn có thể tạo nhiều MasterPage cho ứng dụng web của mình. Ví dụ: Code 1. MasterPage html{ background-color:#e5e5e5; font-family:Verdana;} .content{ background-color:White; border:black 1px solid; width:700px; margin:auto;} .leftcolumm{ float:left; border-right:black 1px solid; width:200px; padding:5px; height:300px} .rightcolumm{ float:left; padding:5px; height:300px} 68