Báo cáo Thực tập mô hình MVC trong Asp.net
Mục Lục
Danh Mục Các Từ Tiếng Anh .2
Danh Mục Các Bảng .2
Danh Mục Các Hình 2
Mở Đầu 2
Phần I.Tổng Quan Về Mô Hình MVC Trong .Net
1.1.Lịch sử phát triển 2
1.2.Đặc điểm của Asp.net MVC 2
1.3.Kiến trúc của Asp.net MVC. 2
1.4.So sánh Asp.net Webform với Asp.net MVC. 2
Phần II. Các Thành Phần Cơ Bản Trong Asp.net MVC
2.1.Các khái niệm ban đầu 2
2.2.Url và Routing .2
2.3.Controller và Action Method .2
2.4.Views .2
2.5.Models 2
Phần III.Xây dựng ứng dụng SportStore
ùng đăng nhập vào hệ thống return new HttpUnauthorizedResult(); EmptyResult return new EmptyResult(); Trả Về Định Dạng HTML Bằng Cách Hiện Thị Một View: Hầu hết action method có nhiệm vụ trả dạng html cho trình duyệt, tức là tạo ra một khung nhìn, tức là một ViewResult: Gọi View() để tạo ra một đối tượng ViewResult(), khi thực thi kết quả MVC FrameWork sẽ tìm trong ứng dụng một view chúng ta chỉ định để hiển thị.Nếu chúng ta có sử dụng areas thì nó sẽ tìm ở những vị trí sau: Nếu chúng ta không sử dụng areas hoặc tìm không thấy thì MVC FrameWork sẽ tìm ở những vị trí tiếp theo: Chuyển Dữ Liệu Từ Action đến View: Như đã biết controller và view là 2 thành phần khác nhau, controller cung cấp dữ liệu cho view nhưng view không làm việc trực tiếp với controller, một bộ phận giúp chuyển dữ liệu giữa controller đến view là ViewData,Controller có thuộc tính gọi là ViewData có kiểu ViewDataDictionary. ViewDaTa Như Là Một Từ Điển: Đầu tiên chúng ta phải có đầy đủ ViewData của controller với tên và giá trị tương ứng sau đó hiển thị view. Có thể truy cập vào giá trị của ViewData trong view như sau: Strongly Type Object Trong ViewData.Model: ViewDataDictionary có thuộc tính đặc biệt gọi là Model Bây giờ chúng ta có thể truy cập vào ViewData.Model trong view như sau: Trả Về Dữ Liệu Văn Bản: Ngoài định dạng html ứng dụng web còn có nhiều định dạng khác nữa như: XML RSS và ATOM JSON (dùng cho ứng dụng sữ dụng AJAX) CSV (thường dùng cho việc xuất dữ liệu ra định dạng Exel) Văn bản thuần túy Để thực hiện thành công việc trả về bất kì định dạng dữ liệu nào cần chú ý 3 điều như sau: Dữ liệu của nó là chuổi. Kiểu của nội dung gửi về: text/xml cho XML, text/csv cho CSV,application/rss+xml cho RSS. Có thể tìm thấy những giá trị này trong lớp System.Net.Mime.MediaTypeNames. Dạng dữ liệu mã hóa được đặc tả như là một đối tượng System.Text.Encoding, chuổi sẽ được chuyển sang dãy các byte để gửi đi. Nếu trả về dạng văn bản, và không quan tâm đến kiểu của nội dung, chúng ta có thể làm tắt như sau, FrameWork sẽ tự chuyển nó sang ContentResult: Tạo RSS Feed: Ví dụ cách dùng ContentResult. Để tạo RSS 2.0 chúng ta dùng hàm tạo tài liệu XML .NET 3.5 XDocument API và sau đó gửi đến cho trình duyệt: Trả Về Dữ Liệu Dạng JSON: JavaScript Object Notation (JSON) là dạng văn bản có cấu trúc, nó được dùng trong ứng dụng Ajax để gửi một đối tượng từ server đến trình duyệt. Asp.net MVC đã xây dựng lớp JsonResult để làm việc với các đối tượng JSON : Nó sẽ chuyển citiesArray sang định dạng JSON như sau: JsonResult sẽ không làm việc với phương thức POST. Trả Về Câu Lệnh JavaScript : Ta có thể dùng phương thức JavaScript() để trả về một JavaScriptResult Để làm việc này ta phải sử dụng đến MicrosoftAjax.js và MicrosoftMvcAjax.js Trả Về File Và Dữ Liệu Dạng Nhị Phân: FileResult là lớp cơ sở trừu tượng dùng cho việc gửi dữ liệu nhị phân đến trình duyệt. Asp.net MVC đã xây dựng 3 lớp con để dùng vào việc này: FilePathResult: gửi một file trực tiếp từ hệ thống máy chủ. FileContentResult: gửi nội dung là dãy các byte từ bộ nhớ. FileStreamResult: gửi nội dung của đối tượng System.IO.Stream mà chúng ta đã mở từ một nơi nào đó. Thông thường chúng ta lại không sử dụng 3 hàm này mà sữ dụng một overload là File(). Gửi File Trực Tiếp Từ Ổ Đĩa: Kết quả của câu lệnh trên như sau: Các Tham Số Trong Phương Thức File(): Tham số Kiểu dữ liệu Ý nghĩa filename (required) string Đường dẫn của file contentType(required) string Kiểu của nội dung fileDownloadName (optional) string Tên file sẽ gửi 2.4.Views : Thêm Nội dung Vào View: Có 5 cách để thêm dữ liệu động vào View: Kỹ thuật Sử dụng Inline code Là thành phần độc lập với view, ví dụn như câu lệnh if, foreach, những câu lệnh này phải đặt trong or Inline code là công cụ cơ sở các kỹ thuật khác đều xây dựng dựa vào nó. HTML helpers Sử dụng để tạo ra thể html, dữ liệu sẽ được lấy từ ViewData hoặc bất kì một Model nào bằng cách trả về một MvcHtmlString Server control Dùng như trong Asp.Net Web Form Partial views Sử dụng chúng khi muốn chia sẽ một view cho nhiều thành phần khác Child actions Tạo những giao diện dạng control có thể dùng lại được. Sử Dụng Inline Code: Tạo lớp Person như sau: Tạo một view ShowPerson.aspx,và chọn vào Creat a strongly-typed view,chọn lớp Person: Trong ShowPerson.aspx chúng ta sử dụng inline code như sau: Hiển Thị Input Control: Control Ví dụ Check box Html.CheckBox("myCheckbox", false) sẽ hiển thị như sau: Hidden field Html.Hidden("myHidden", "val") -> Radio button Html.RadioButton("myRadiobutton", "val", true)-> Password Html.Password("myPassword", "val")-> Text area Html.TextArea("myTextarea", "val", 5, 20, null)-> Text box Html.TextBox("myTextbox", "val")-> Dùng Strongly Type Trong Việc Tạo Ra Input Control: Control Ví dụ Check box Html.CheckBoxFor(x => x.IsApproved) -> Hidden field Html.HiddenFor(x => x.SomeProperty)-> Radio button Html.RadioButtonFor(x => x.IsApproved, "val") -> Password Html.PasswordFor(x => x.Password) -> Text area Html.TextAreaFor(x => x.Bio, 5, 20, new{}) -> Text box Html.TextBoxFor(x => x.Name) -> Thêm Thuộc Tình Cho Các Thẻ Html: Kết quả hiển thị như sau: Nếu muốn thêm thuộc tính class ta có thể làm như sau: Kết quả của câu lệnh trên như sau: Hiển Thị Link Và Url: Mô tả Ví dụ Đưa ra đường dẫn Url.Content("~/Views/Shared/Do an tot nghiep.pdf")-> Link đến một action/controller Html.ActionLink("Hi", "About", "Home") -> Link tuyệt đối Html.ActionLink("Hi", "About", "Home", "https", "www.example.com", "anchor", new{}, null)-> Url của action Url.Action("About", "Home") -> Link đến route Html.RouteLink("Hi", new { controller = "c", action = "a" }, null) -> Chúng ta có thể thêm một số tham số mở rộng trong khi gọi route gọi là routeValues : Html.ActionLink("Click me","MyAction",new{controller="Another", param = "val"}) Nội dung được hiển thị như sau: Hiển Thị Dropdown List Và Multiselect Lists: Mô tả Ví dụ Drop-down list Html.DropDownList("myList", new SelectList(new [] {"A", "B"}), "Choose") -> Drop-down list Html.DropDownListFor(x => x.Gender, new SelectList(new [] {"M", "F"})) -> Multiselect list Html.ListBox("myList", new MultiSelectList(new [] {"A", "B"})) -> Multiselect list Html.ListBoxFor(x =>x.Vals,new MultiSelectList(new [] {"A", "B"}))-> Tạo một lớp Region như sau: Trong action method tạo như sau: Trong view thêm vào đoạn code : Kết quả hiển thị như sau: 2.5.Models: Khi sử dụng Html helper, chúng sẽ hiển thị thành phần của form với tên và giá trị tương ứng với các thuộc tính trong model. Khi người dùng gửi request lên server hệ thống model binding sẽ so sánh dữ liệu đến với kiểu của đối tượng model, sau đó phân tách thành phần phù hợp với điều kiện validation. Templated View Helper: Cung cấp những tùy chọn để chúng ta có thể hiển thị hoặc sữa chữa một đối tượng model hay thuộc tính của nó nhưng không cần phải dùng đến yếu tố html, nó cho phép bạn hiển thị theo template của đối tượng hoặc thuộc tính của model. Hiển Thị Và Sửa Chữa Model Sử Dụng Templated View Helper: Tên Ví dụ Mục đích Display Html.Display("Title") Hiển thị view chỉ đọc đặc tả thuộc tính của model,hiển thị template theo thuộc tính của kiểu đối tượng liên kết với nó. DisplayFor Html.DisplayFor(x => x.Title) Sử dụng giống như trên nhưng có sử dụng strongly-type DisplayForModel Html.DisplayForModel() Viết tắt của Html.DisplayFor(x => x.Title).Hiển thị view chỉ đọc đối với một đối tượng model. Editor Html.Editor("Title") Hiển thị view để sửa chữa thuộc tính của model EditorFor Html.EditorFor(x => x.Title) Sử dụng strongly-type EditorForModel Html.EditorForModel() Viết tắt của Html.EditorFor(x => x.Title) Label Html.Label("Title") Hiển thị thẻ html lable LabelFor Html.LabelFor(x => x.Title) Sử dụng strongly-type LabelForModel Html.LabelForModel() Viết tắt của Html.LabelFor(x => x.Title) DisplayText Html.DisplayText("Title") Hiển thị chuổi đặc tả thuộc tính của model DisplayTextFor Html.DisplayTextFor(x => x.Title) Sử dụng strongly-type Tạo 2 lớp như sau: Tạo view sử dụng strongly-type Person, thêm code như sau: Kết quả hiển thị như sau: Các lớp trong .Net chỉ cung cấp một số lượng có hạn các thông tin mà nó chứa, nó chỉ cung cấp loại và tên của các thuộc tính, Asp.Net MVC cung cấp model metadata để mở rộng thêm thông tin cho model, nó cung cấp việc làm thế nào để hiển thị dữ liệu để xem hay sửa chữa, cung cấp cách thức để xác nhận dữ liệu đến. Tạo lớp Person như sau: Khi hiển thị sẽ như sau: Thay vì sử dụng Html.EditorForModel ta có thể sử dụng Html.Editor hoặc Html.EditorFor ta có thể sửa lại view như sau Kết quả sẽ như sau: Chú Thích Dữ Liệu: Thuộc tính Kết quả [DisplayColumn] Thuộc tính sẽ được hiển thị [DataType] Kiểu giá trị của dữ liệu [ReadOnly] Thuộc tính chỉ cho phép đọc [DisplayFormat] Định dạng khi hiển thị ví dụ: định dạng chuổi {0:c} hiển thị số theo dạng tiền tệ [Required] Thuộc tính bắt buộc phải có
File đính kèm:
- Báo cáo thực tập mô hình MVC trong Asp.net.docx