Những điểm mới trong ASP.NET MVC 3
ASP.Net MVC 3 một phiên bản khấp dẫn, thêm nhiều tính năng và cải tiến mới
rất tuyệt vời, giúp đơn giản hóa mã (code) ca bạn. ASP.Net MVC 3 cũng tương thích
ngược với ASP.Net MVC 1 và ASP.Net MVC 2, khiến việc nâng cấp c ứng dụng hiện
rất dễ dàng. Bài viết này strình bày vnhững tính năng mới như: Razor, multi view
engine, những cài tiến trong: controller, JavaScript và Ajax, Model Validation,
Dependency Injection, và các tính năng mới khác.
1. Công c xem Razor (The Razor View Engine)
- ASP.net MVC 3 đi kèm với một công cụ xem mới tên Razor với những lợi ích
sau:
pháp Razor sạch sẽ xúc tích, đòi hỏi một số lượng tối thiểu các tổ hợp
phím.
Việc tìm hiểu Razor tương đối dễ dàng nó dựa trên ngôn ngC# và Visual
Basic.
Visual Studio bao gồm IntelliSense và mã cú pháp Razor được màu hóa.
Razor views thkiểm tra từng đơn vị không đòi hỏi bạn phải chạy các ứng
dụng hoặc phải chạy web server.
- Một số tính năng mới của Razor:
Cú pháp @model để xác định các loại sẽ được truyền vào view.
@**@ là cú pháp comment.
Khả năng định rõ mặc định (như layoutpage) một lần cho toàn bộ trang web.
Phương thức Html.Raw để hiển thị c văn bản mà không cần mã hóa Html cho
nó.
Hỗ trợ chia sẽ mã giữa nhiều views (_viewstart.cshtml hay _viewstart.vbhtml).
- Razor cũng bao gồm những công cụ hỗ trợ HTML mới, chẳng hạn như:
Chart biểu diễn một biểu đồ, cung cấp các tính năng như control chart trong
ÁP.NET 4.
WebGrid biểu diễn một lưới dữ liệu (data grid), hoàn chỉnh với chức năng phần
trang và phân loại.
Crypto S dụng các thuật toán m (hashing algorithms) để tạo thuộc tính thông
thạo và băm các mật khẩu.
WebImage – biểu diễn một hình ảnh.
WebMail – gởi tin nhắn email.
- Để biết thêm các thông tin về Razor, xem thêm các nguồn sau:
Scott Guthrie’s blog post introducing Razor
Scott Guthrie’s blog post introducing the @model keyword
Scott Guthrie’s blog post introducing Razor layouts
Razor API Quick Reference
MVC 3 Release Notes
2. H trợ đa View Engines (Support for Multiple View Engines)
- Thêm hộp thoại View trong ASP.NET MVC 3 cho phép bạn chọn các view engine mà
bạn muốn làm việc với nó, và hộp thoại New Project cho phép bạn xác định view engine
mặc định cho một project. Bạn thể chọn view engine Web Forms (ASPX), Razor, hay
một view engine nguồn mở như Spark, NHaml, hay NDjango.
3. Những cải tiến Controller
3.1 Global Action Filters
Đôi khi bạn muốn thực hiện một logic hoặc trước khi một phương thức thực hiện hoặc
sau một một phương thức hành động được thực hiện. Để hỗ trợ điều này, ASP.NET
MVC 2 đã cung cấp bộ lọc hành động (Action Filters). Action Filter là các thuộc tính tùy
chỉnh cung cấp khai báo một phương tiện để thêm trước hành động và sau hành động mt
hành vi đxác định phương thức controller nh động cụ thể. MVC 3 cho phép bnaj ch
định các blọc chung bằng cách thêm chúng vào bsưu tập GlobalFilters. Để biết thêm
thông tin có thể tham khảo ở những nguồn dưới đây:
Scott Guthrie’s blog on the MVC 3 Preview
Filtering in ASP.NET MVC
3.2 Thuộc tính mới “ViewBag
MVC 2 h trợ điều điều khiển một thuộc tính ViewData để cho phép bạn chuyển dữ liệu
đến một view template bằng cách sử dụng một API. Trong MVC 3, bạn có thể sử dụng cú
pháp đơn giản n một chút với thuộc tính ViewBag để thwucj hiện cùng một mục đích
trên. dụ, thay vì viết ViewData[“Message”] = “text”, bạn thể viết
ViewBag.Message = “text”. Bạn không cần phải xác định lớp mạnh bất kỳ để sdụng
thuộc tính ViewBag. Bởi vì một thuộc tính năng động (dynamic property), bạn
ththay vì chnhận hay thiết lập các thuộc tính và sgiải quyết các ván đề còn lại tự
động khi chạy. Bên trong thuộc tính ViewBag được lưu trữ như cặp name/value trong từ
điển ViewData. (Lưu ý: trong hầu hết các phiên bản trước của MVC3, thuộc tính
ViewBag có tên là ViewModel).
3.3 Các kiểu “ActionResult” mới
Dưới đây là các kiểu ActionResult phương pháp trgiúp mới và nâng cao trong MVC
3:
HttpNotFoundResult . Trvề trạng thái mã HTTP 404 cho khách hàng.
RedirectResult . Tr về một chuyển hướng tạm thời (mã trạng thái HTTP 302)
hoặc một chuyển hướng vĩnh viễn (mã trạng thái HTTP 301), phụ thuộc vào một
tham sBoolean. Kết hợp với thay đổi này, các lớp control hiện nayba phương
pháp để thực hiện thường xuyên đổi hướng: RedirectPermanent ,
RedirectToRoutePermanent , RedirectToActionPermanent . Những phương
pháp này tr về một dữ liệu của RedirectResult với Permanent sở hữu thiết lập
đúng .
HttpStatusCodeResult . Trả về một mã trạng thái người dùng được xác định.
4. JavaScript và Ajax
Theo mặc định, Ajax và các công chỗ trợ hợp lệ trong MVC 3 sử dụng một cách tiếp
cận unobtrusive JavaScript. Unobtrusive JavaScript nội tuyến tránh tiêm tín hiệu từ
JavaScript vào HTML. Điều này làm cho HTML của bạn nhỏ hơn ít lộn xộn n,
làm cho chuyển đổi ra ngoài d ng hơn hay tùy chỉnh các thư viện JavaScript.
Validation helpers trong MVC 3 cũng sử dụng plugin jQueryValidate theo mặc định.
Nếu bạn muốn MVC 2 thực hiện, bạn thể hiệu hóa unobtrusive JavaScript bawgnf
cách thiết lập lại file web.config. Để biết thêm thông tin v Ajax và JavaScript tham
khảo những nguồn sau:
Basic introduction to unobtrusive JavaScript on the Wikipedia site
Brad Wilson’s Unobtrusive JavaScript Post
Brad Wilson’s Unobtrusive JavaScript Validation Post
Creating a MVC 3 Application with Razor and Unobtrusive JavaScript (tutorial on
the ASP.NET site)
MVC 3 Release Notes
4.1 Client-Side Validation Enabled by Default
- Trong các phiên bản trước đó của MVC, bạn cần phải gọi rõ phương thức
Html.EnableClientValidation tmột view để cho phép phía máy khác xác nhận. Điều này
trong MVC 3 không cần thiết vì phía khách hàng xác nhận là kích hoạt mặc định. (Bạn
có thvô hiệu hóa điều này bằng cách sử dụng một thiết lập trong file web.config).
- Để cho phía máy khách xác nhận để làm việc, bạn vẫn cần phải tham khảo thích hợp
thư viện jQuery và jQuery Validation trong trang web của bạn. Bạn có thể lưu trữ các thư
viện trên máy ch của chính bạn hoặc tham chiếu cho chúng từ một mạng lưới phân bố
nội dung(CDN Content Delivery Network) như CDNs từ Microsoft hay Google.
4.2 Remote Validator
- ASP.NET MVC 3 hỗ trợ lớp RemoteAttribute cho phép bạn tận dụng lợi thể của plugin
jQuery Validation để hỗ trợ xác nhận từ xa. Điều này cho phép các bên các nhận thư viện
client-side validation để tự động gọi một phương thức tùy chnh mà bạn xác định trên
máy chủ để thực hiện xác nhận logic chỉ có thể được xác nhận phía máy chủ.
- Trong dsau đây, thuộc tính Remote c định rừng xác nhận máy khác sẽ gọi một
hành động tên UserNameAvailable trên lớp UsersController để xác minh trường
UserName.
public class User {
[Remote("UserNameAvailable", "Users")]
public string UserName { get; set; }
}
- Ví dụ sau đây minh họa các điều khiển tương ứng:
public class UsersController {
public bool UserNameAvailable(string username)
{
if(MyRepository.UserNameExists(username))
{
return "false";
}