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
32 trang |
Chia sẻ: maiphuongdc | Lượt xem: 4531 | Lượt tải: 5
Bạn đang xem trước 20 trang tài liệu Báo cáo Mô hình MVC trong .Net, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
test
2005
ASP.NET 2.0
2007
ASP.NET Ajax
2008
ASP.NET 3.5
2009
Asp.net MVC 1.0
2010
Asp.net MVC 2.0
ASP.NET 4.0
2011
Asp.net MVC 3.0
1.2.Đặc Điểm Của Asp.net MVC:
Tách rõ ràng các mối liên quan, mở khả năng test TDD(test driven developer). Có thể test unit trong ứng dụng mà không cần chạy Controller cùng với tiến trình Asp.net và có thể dùng bất kì một unit test framework nào như NUnit,MBUnit,MS Test..
Có khả năng mở rộng, mọi thứ trong MVC được thiết kế cho phép dễ dàng thay đổi và tùy biến.(ví dụ:có thể lựa chọn sử dụng engine view riêng, routing policy,parameter serialization…).
Url mạnh mẽ, trong sáng, đuôi các url không có phần mở rộng .aspx.Ví dụ:có thể ánh xạ địa chỉ /Product/Edit/4 để thực hiện hành động “Edit” của lớp điều khiển ProductController.
Asp.net MVC cũng hổ trợ các file dạng Asp.net như .aspx, .ascx, .Master và đánh dấu các tập tin này như một “view template” (có thể dễ dàng dùng các tính năng của Asp.net như lồng Master Page, <%=<% snippets, mô tả server controls, template, data-binding, localization,…).
Tuy nhiên sẽ không còn postback và interactive back server và thay vào đó là interactive end-user tới một Controller class,sẽ không có viewstate, page lifecycle.
Asp.net MVC hổ trợ đầy đủ các tính năng bảo mật của Asp.net như form/windows authenticate, Url authorization, membership/roles,output và data caching, session/profile state, configuration system, provider architecture ….
1.3.Kiến Trúc Của Asp.net MVC:
Trong mô hình MVC một đối tượng đồ họa người dùng(GUI Component) gồm 3 phần cơ bản:Models,Views,Controllers.
Models: trong các ứng dụng dựa trên MVC đó là những thành phần có nhiệm vụ lưu trữ thông tin, trạng thái của các đối tượng, thông thường nó là một lớp được ánh xạ từ một bảng trong CSDL. Lấy ví dụ, chúng ta có lớp Product được sử dụng để mô tả dữ liệu từ bảng Products trong SQL, bao gồm ProductID, OrderDate...
Views:là thành phần chịu trách nhiệm hiển thị lên các thông tin cho người dùng thông qua giao diện. Thông thường, các thông tin hiển thị được lấy từ thành phần Models. Ví dụ, đối tượng Product có một "Edit" view bao gồm các textboxes, các dropdowns và checkboxes để chỉnh sửa các thuộc tính của sản phẩm; có một "Display" view gồm 2 dòng, cột dòng là ProductID, dòng sau là OrderDate... để xem thông tin về sản phẩm.
Controller:chịu trách nhiệm xữ lý các tác động về mặt giao diện, các thao tác đối với Models, và cuối cùng là chọn một Views thích hợp để hiển thị, trong kiến trúc MVC View chỉ có trách nhiệm hiển thị giao diện mà thôi, còn điều khiển dòng nhập xuất vẫn là do Controller.
Một lợi điểm của MVC là nó bắt buộc phải tạo ra sự rành mạch trong liên kết giữa 3 thành phần models,views,controllers trong ứng dụng. Duy trì được mối quan hệ rành mạch khiến việc kiểm tra ứng dụng dễ dàng hơn, đồng thời trách nhiệm của các thành phần được định nghĩa rõ ràng và đều ăn khớp với nhau.
1.4.So Sánh Asp.net Webform Với Asp.net MVC:
Asp.net Webfrom sử dụng Viewstate để quản lý các trang web đều có lifecycle,postback, dùng các web controls, các evens để thực hiện các hành động cho UI khi có sự tương tác với người dùng nên hầu hết Asp.net xử lý chậm.
Asp.net MVC Framework chia làm 3 phần: Models, Views, Controllers. Mọi tương tác với Views sẽ thực hiện hành động trong Controller, không còn postback,lifecycle và các events.
Việc kiểm tra test lỗi,debug với Asp.net đều phải chạy tất cả các tiến trình của Asp.net và mọi sự thay đổi ID của control nào cũng ảnh hưởng đến ứng dụng.Đối với Asp.net MVC Framework thì việc có thể sử dụng unit test để thẩm định các Controlers thực hiện như thế nào.
Tính năng
Asp.net Webform
Asp.net MVC
Kiến trúc
Webform-Business-Database
Models-Views-Controllers
Cú pháp chương trình
Tất cả các sự kiện và control do server quản lý
Các sự kiện do Controlers quản lý
Truy cập dữ liệu
Sữ dụng hầu hết các công nghệ truy cập dữ liệu trong ứng dụng
Sử dụng LinQ to Sql class để tạo mô hình truy cập đối tượng
Debug
Debug chương trình phải thực hiện tất cả bao gồm các lớp truy cập dữ liệu,hiển thị,điều khiển các control
Sử dụng unit test để kiểm tra các phương thức trong Controller
Tốc độ phân giải
Chậm vì trong trang có nhiều control và Viewstate lớn
Nhanh và không cần phải quản lý các Viewstate
Tương tác với Javascript
Khó khăn do các control được quản lý bởi server
Dễ dàng hơn do các đối tượng không do server quản lý
Url address
Cấu trúc url có dạng: .aspx?&
Cấu trúc địa chỉ rành mạch theo dạng Controller/Action/Id
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:
Trong một ứng dụng xây dựng trên mô hình MVC đều được chia làm 3 phần Models, Views, Controllers.
Bất cứ một request nào đến sever sẽ được xử lý ở Controller,Controller sẽ tiếp nhận request đó và xữ lý, bên trong Controller sẽ có nhiều Actions, mỗi Action tương ứng xữ lý một request. Ví dụ chúng ta có ProductController bên trong đó ViewAction để tiếp nhận request để xem xét thông tin của 1 product, trongânkhi UpdateAction tiếp nhận request cập nhật sản phẩm khi người dùng kích nút thay đổi thông tin sản phẩm.
Tầng Models đại diện cho những entity với bên trong hệ thống của, đối với một số hệ thống thì Business Logic có thể nằm trong tầng Models hoặc nằm trong Controller tùy theo thiết kế.
Sau khi Controller làm việc với tầng Models để lấy thông tin cần cho người dùng thì Controller sẽ gửi cho Views một DataModel và Views sẽ render cái DataModel đó ra hiển thị cho người dùng.
Asp.net MVC không phải là một sự thay thế cho Asp.net WebForm mà chỉ là một sự chọn lựa mới cho những người phát triển web, Asp.net MVC cũng có những khái niệm nhưng Asp.net WebForm như Configuration,Security,Roles…
Cấu trúc chính 1 ứng dụng trong dự án Asp.net MVC:
Content:thư mục chứ file css,file ảnh.
Controllers:chứ các Controller của ứng dụng, một Controller bắt buộc theo sau nó có “Controller”.
Models:chứa các lớp Business Logic.
Views:chứ những trang aspx,tương ứng với một Controller thì sẽ có một Views tương ứng.
2.2.Url Và Routing:
Hầu hết các Web Framework như Asp, Jsp, Php… đều ánh xạ url vào 1 file lưu trên đĩa.MVC Framwork làm việc theo cách khác, thay vì ánh xạ các file trên đĩa nó sẽ đi trực tiếp vào class những lớp này là các Controllers.
Url
Thực hiện
E:webroot\default.aspx
E:webroot\admin\login.aspx
Một url như trên phụ thuộc vào cấu trúc thư mục trong ứng dụng, không thân thiện với người dùng, và không thân thiện với các công cụ search như Google.
Url
Thực hiện
Controller=”Gallery”, action=”Display”
Controller=”Admin” action=”Login”
Routing system quản lý tất cả những chuyện này và có 2 nhiệm vụ chính :
Cầu nối giữa url trên thanh địa chỉ của trình duyệt với Controller và Action method tương ứng.
Tạo ra những url dựa vào Controller và Action Method mà người lập trình đưa vào.
Hệ Thống Định Tuyến:
Có 5 thuộc tính của một đối tượng Route:
Thuộc tính
Ý nghĩa
Kiểu
Ví dụ
Url
Url dùng để nói với các Parameters
string
“Browse/Category/pageIndex”
RouteHandler
Xử lý các request
IRouteHandler
new MvcRouteHandler()
Default
Tạo ra giá trị mặc định cho các Parameters. Nó có thể là UrlParameter.Optional
Nghĩa là nếu không cup cấp một giá trị nào trên url thì sẽ không có giá trị nào cho các Parameters
RouterVaulueDictionary
new RouterVaulueDictionary (new{
controller= "Products",
action = "List",
category = "Fish",
pageIndex = 3 })
Constraints
Thiết đặt điều kiện cho các Parameters
RouterVaulueDictionary
new RouteValueDictionary
(new {
pageIndex = @"\d{0,6}"
})
DataTokens
Thiết đặ tùy chọn cho các route nhập vào và sẽ được bộ định tuyến xữ lý
RouterVaulueDictionary
Thành phần chính:RouteBase, Route và RouteCollection:
Hệ thống định tuyến sẽ chạy khi có request
Cấu hình định tuyến được xây dựng dựa trên 3 thành phần chính:
RouteBase:Là lớp cở sở trừu trường của một route,nếu không thích cách mà những đối tượng route tìm ra những url khớp với nó hoặc muốn làm cho những url có dạng khác bạn có thể viết lại lớp và kế thừa từ RouteBase lúc đó ta phải overide lại 2 phương thức: GetRouteData và GetVirtualPath.
Route:Là lớp con sử dụng tiêu chuẩn của RouteBase,định nghĩa một URL templating, defaults, constraints.
RouteCollection:là một định tuyến cấu hình đầy đủ, bao gồm danh sách RouteBase.
RouteTable.Route là một thể hiện tĩnh của RouteCollection, thông thường nó chỉ được gọi một lần khi ứng dụng chạy lần đầu tiên, trong phương thức Application_Start() trong file Globla.asax.cs. Nó là một đối tượng tĩnh, vì vậy nó tồn tại trong suốt quá trình sống của ứng dụng, và không tại tạo lại mỗi khi có một request tới. Trong hàm Application_Start() lại gọi phương thức tĩnh RegisterRoute().
Quá Trình Xữ Lý Của Routing Khi Có Một Request:
Khi có một request đến, hệ thống sẽ gọi mỗi IHttpModules để đăng kí với ứng dụng, với .Net 3.5 ứng dụng sẽ tham chiếu từ Web.config. Với .Net 4.0 ứng dụng sẽ tham chiếu từ ASP.NET Web.config mở rộng và IIS 7.x applicationHost.config
Module này thực hiện 3 điều:
Nó tìm đối tượng RouteBase đầu tiên trong RouteTable.Routes trùng hợp request.Route phù hợp khi đáp ứng được 3 yếu tố sau:
+ Url request phù hợp theo mẫu của một Route.
+ Tất cả các thông số có mặt trong Url request hoặc trong giá trị mặc định.
+ Tất cả các thông số đều thõa mãn Constraints.
UrlRoutingModule sẽ bắt đầu tìm từ giá trị đầu tiên theo thứ tự các giá trị tiếp theo trong RouteTable.Route cho đến khi gặp giá trị trùng khớp,vì vậy điều quan trọng nhất là ta phải sắp xếp các route theo đúng thứ tự thích hợp.
Nó sẽ hỏi đối tượng RouteBase để cung cấp một cấu trúc RouteData, và đặc tả cách xữ lý request như thế nào. RouteData là một dữ liệu đơn giản, cấu trúc gồm 4 thuộc tính:
+ Route : Tham chiếu đến tuyến đường được chọn, nó thuộc RouteBase.
+ RouteHandler: là đối tượng hiện thực của IrouteHandler, cái mà sẽ xữ lý request.Trong Asp.Net MVC nó thường là một thể hiện của MvcRouteHandler.
+ Values: Từ điển chứa tên và giá trị được lấy từ request cộng thêm giá trị mặc định của tham số trong url.
+ DataTokens: là từ điển chứa cấu hình bổ sung được cung cấp bởi route đưa vào.
Nó gọi RouteHandler của RouteData, nó cung cấp cho RouteHandler thông tin về yêu cầu hiện tại thông qua một tham số gọi là requestContext.Điều này bao gồm thông tin của RouteData và một đối tượng HttpContextBase đặc tả tất cả thông tin liên quan bao gồm Http header, cookies, authentication, query string,dữ liệu của form post.
RouteValueDictionary:
Thuộc tính mặc định của Route là một RouteValueDictionary, đó là một API linh hoạt vì vậy bạn có thể làm nhiều cách khác nhau mà bạn muốn. RouteValueDictionary sẽ tự trích ra danh sách những thuộc tính (controller,action) vì vậy bạn cần cung cấp danh sách tên và giá trị những thuộc tính này.
Có một cách phổ biến để tạo RouteValueDictionary đó là cung cấp một IDictionary như là một tham số khởi tạo hoặc cách khác là dùng collection initializer.
Ví dụ:
Tạo Một Tuyến Với MapRoute():
Asp.Net MVC đã mở rộng phương thức cho RouteCollection gọi là MapRoute. Nó cung câp một cách khác để thêm một tuyến, thay vì gọi route.Add(new Route(…)).
Ví dụ:
Trong ví dụ trên PublicProductsList là tên của tuyến,đó là chuổi duy nhất và có thể đặt tùy ý, tên của tuyến có thể để null.
Dùng Parameter:
Route này sẽ nối với những Url như là: /Catalog/yellow hoặc /Catalog/1234, và hệ thống định tuyến sẽ thêm tên/giá trị tương ứng cho đối tượng request của RouteData. Trong request /Catalog/yellow RouteData.Values[“color”] cho giá trị yellow.
Nhận Giá trị Parameter từ Action Methods:
Một action methods có thể lấy ra các parameter. Khi Asp.Net MVC muốn gọi một action methods của bạn nó cần cung cấp giá trị cho mỗi parameter trong methods. Một trong những nới mà nó lấy giá trị là từ RouteData, nó sẽ tìm giá trị trong từ điển của RouteData, nhằm tìm kiếm một khóa và giá trị tương ứng với tên của parameter.
Dùng Default:
Bạn không cung cấp giá trị cho {color}, nó trở thành tham số bắt buộc.nhưng với request /Catalog không phù hợp, lúc này chúng ta có thể tạo ra một tùy chọn bằng cách thêm vào một đối tượng Default:
Bây giờ nếu có một request dạng: /Catalog/ và Catalog/yellow.
RouteData.Values[“color”] của /Catalog/ sẽ là giá trị null.
RouteData.Values[“color”] của /Catalog/yellow sẽ là giá trị yellow.
Cài Đặt Parameter Không Nhận Giá Trị Default:
Chúng ta có thể dùng giá trị mặc định đặc biệt UrlParameter.Optional thay vì đưa ra giá trị thực cho tham số.
Điều này muốn nói rằng nếu request cung cấp một giá trị page thì chúng ta sẽ dùng nó, nhưng nếu request đến không cung cấp giá trị page thì route sẽ không cung cấp giá trị page cho action methods.
Tại sao chúng ta không sử dụng giá trị 0 hoặc null, điều này có 2 lý do:
Nếu action methods của bạn lấy kiểu int cho giá trị page, thì đó không phải là kiểu null, bạn sẽ cung cấp một giá trị là 0 hoặc giá trị nào đó kiểu int, nghĩa là action methods sẽ luôn nhận một giá trị cho page.
Nếu giá trị cho page là null, thì nó sẽ hạn chế đối với parameter của action methods khi mà dữ liệu của request đến là nhiều giá trị query string.
Dùng Constraints:
Đôi khi chúng ta phải thêm những điều kiện phải đáp ứng cho route.
Ví dụ:
Một số route chỉ nối với Get mothod hoặc ngược lại.
Một vài parameter sẽ phải tuân theo mẫu.
Một số url được yêu cầu bởi những trình duyệt web thông thường, có những url được yêu cầu từ trình duyệt thiết bị khác.
Trong trường hợp này chúng ta sẽ dùng đến thuộc tính Contraints của Route. Đó là cách thiết đặt quy tắt cho các patameter.
Kết Hợp Regular Expressions:
Để chắc chắn parameter là một số, chúng ta có thể dùng như sau:
Xác nhận id là số có chiều dài 6 kí tự. Ví dụ các url hợp lệ: Articles/1, Articles/123456….
Kết Hợp Với Phương Thức HTTP:
Nếu muốn route chỉ nối với phương thức POST hoặc GET, chúng ta có thể lớp HttpMethodConstraint nó kế thừa từ IRouteConstraint:
Tạo URL đi ra:
Việc xữ lý url đến mới là một nữa. Ứng dụng phải cung cấp đường link để người dùng di chuyển đến những nơi khác.
Đối với Asp.Net Web Form hầu hết các ứng dụng khác khi xây dựng link ta phải xây dựng chuổi với code một cách cứng, ví dụ khi gọi trang Details.aspx với tham số id url sẽ như sau: mylink.NavigateUrl=”~/Details.aspx”+ ItemID;
Trong MVC sẽ viết như sau:
” >Chi Tiết
Tạo Ra Hyperlinks với Html.ActionLink():
Nó sẽ render ra url dạng với action là List trong lớp ProductsController:
Các Tham Số Bổ Sung:
Nó sẽ render ra url dạng:
Hoặc nếu route của bạn đã cấu hình dạng: /Products/List/{color}/{page} thì code sẽ render ra url dạng:
Ta có thể thêm thuộc tính của thẻ Html như sau:
Đoạn mã trên sẽ tạo ra Html như sau:
Tạo url không có link:
Đoạn mã trên sẽ có kết quả như sau:
2.3.Controller Và Action Methods:
Controller có trách nhiệm nhận đầu vào của người dùng,lấy dữ liệu từ tầng Model và di chuyển người dùng đến các vùng trong ứng dụng, nó như là cầu nói giữa các trang và các tầng với nhau.
Tất cả các Controller đều kế thừa Icontroller.
Lớp Cơn Bản Của Controller:
Trong thực tế chúng ta hiếm khi hiện thực trực tiếp từ IController và viết lại phương thức Execute(), bởi vì MVC Framwork cungcấp thành phần cơ sở :
Action methods: Controller của chúng ta có thể có nhiều phương thức chứ không phải chỉ riêng Execute(). Mỗi một action method có thể là chuyển đến url khác, và nhận parameter từ url đến..
Action results: chúng ta có thể cài đặt để trả về một đối tượng kết quả của một action có thể là một trang nội dung, di chuyển sang url khác, hoặc action method.
Filters: là bộ lọc cho action method hoặc cho toàn bộ controller vào những thời điểm khác nhau trong quá trình xữ lý request.
Nhận Dữ Liệu Đầu Vào Trong Controller:
Controller thường xuyên nhận dữ liệu đầu vào, như là query string, dữ liệu từ form hoặc những tham số được đưa vào từ url đến. Chúng ta có ba cách để nhận được dữ liệu này:
Lấy ra từ một context object.
Lấy dữ liệu thông qua parameter trong action method.
Hoặc gọi trực tiếp từ model binding
Lấy Dữ Liệu Từ Context Object:
Những context object thông dụng:
Thuộc tính
Kiểu dữ liệu
Mô tả
Request.QueryString
NameValueCollection
Những biến GET gửi cùng request
Request.Form
NameValueCollection
Những biến POST gửi cùng request
Request.Cookies
HttpCookieCollection
Những cookie do browse gửi cùng request
Request.HttpMethod
String
Phương thức http dùng cho request(POST hoặc GET)
Request.Headers
NameValueCollection
Những http header gửi cùng request
Request.Url
Uri
Url được yêu cầu
Request.UserHostAddress
String
Địa chỉ của người yêu cầu request
RouteData.Route
RouteBase
Route được chọn cho request
RouteData.Values
RouteValueDictionary
Tham số của route được trích ra từ url hoặc giá trị mặc định.
HttpContext.Application
HttpApplicationStateBase
Lưu trữ trạng thái ứng dụng
HttpContext.Cache
Cache
Lưu trữ cache của ứng dụng
HttpContext.Items
IDictionary
Lưu trữ trạng thái của request hiện tại
HttpContext.Session
HttpSessionStateBase
Lưu trữ trạng thái của phiên làm việc
User
IPrincipal
Thông tin xác thực về người đang nhập hệ thống
TempData
TempDataDictionary
Dữ liệu tạm thời của người dùng hiện tại
Ví dụ:
Sử dụng tham số cho các Action Method:
Chúng ta có thể dùng đối tượng context để lấy dữ liệu đầu vào bằng cách:
Nhưng chúng ta có thể viết lại bằng cách truyền tham số ngắn gọn như sau:
Dùng Model Binding trong Action Method Của Controller:
Dữ liệu đến từ một Form có thể có nhiều thuộc tính của một đối tượng. Khi nhận được dữ liệu bạn có thể copy những giá trị này vào một đối tượng, như ví dụ:
Việc code như trên là rất chán và dễ dàng đoán được, rất may là chúng ta có thể dùng model binding để nhận toàn bộ dữ liệu của đối tượng như là một tham số trong action method. Bạn có thể gọi model binding để cập nhật bất kì thuộc thuộc tính nào của đối tượng mà bạn đã tạo trước đó.
Hoặc bạn có thể dùng cách gọi model binding ngầm định như sau:
Controller Trả Lại Dữ Liệu Như Thế Nào:
Sau khi nhận request controller tiến hành xữ lý và đáp trả lại cho người dùng. Có 3 cách chính mà controller trả về kết quả xữ lý cho người dùng:
Đó có thể trả lại nội dung html bằng cách hiển thị một view.
Đó có thể là chuyển hướng đến trang khác bằng cách mở một action method khác.
Đó có thể là một dòng dữ liệu như là JSON, XML hoặc có thể là một file nhị phân.
Khái Niệm ActionResult:
ActionResult trả lại kiểu của action method, trả về mô hình của view, một file, chuyển hướng đến một controller khác, làm cho controller trở thành thành phần kết nối các thành phần của hệ thống, như là một người cảnh sát điều khiển giao thông.
Các kiểu action result:
Kiểu
Mục đích
Ví dụ
ViewResult
Hiển thị một View
return View();
return View(“MyView”,modelObject);
PartialViewResult
Hiển thị một View
return PartitalView();
RedirectToRouteResult
Chuyển hướng đến một action method hoặc tạo ra một url theo cấu hình định tuyến của bạn
return RedirectToAction("SomeOtherAction",
"SomeController");
return
RedirectToRoute("MyNamedRoute");
RedirectResult
Chuyển đến url tùy
ý
return
Redirect("");
ContentResult
Trả lại dữ liệu văn bản dạng thô cho trình duyệt
return Content(rssString,
"application/rss+xml");
FileResult
Trả về dữ liệu dạng nhị phân cho trình duyệt
return File(@"c:\report.pdf",
"application/pdf");
JsonResult
Gửi lại một đối tượng dạng JSON
return Json(someObject);
JavaScriptResult
Trả lại đoạn mã javascript thực thi trên trình duyệt
return
JavaScript("$('#myelem').hide();");
HttpUnauthorizedResult
Xác thực người dù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
Các file đính kèm theo tài liệu này:
- baocao_thuctap.docx