Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Asp.net mvc 3 (c#) (9 tutorials) egroups vn
1. Edit by Nhiên IT (www.eg.vnao.vn)
HƯỚNG DẪN TÌM HIỂU MVC THÔNG
QUA 1 PROJECT MVC MOVIE
(của Microsoft – Edit bởi MHN IT )
1. Giới thiệu ASP.NET MVC 3
Những gì bạn sẽ xây dựng
Bạn sẽ thực hiện một ứng dụng niêm yết phim đơn giản hỗ trợ việc tạo, chỉnh sửa, và phim niêm yết
từ một cơ sở dữ liệu. Dưới đây là hai ảnh chụp màn hình của ứng dụng mà bạn sẽ xây dựng. Nó bao
gồm một trang hiển thị một danh sách các bộ phim từ cơ sở dữ liệu:
Ứng dụng này cũng cho phép bạn thêm, chỉnh sửa, và xóa phim, cũng như xem thông tin chi tiết về
những người cá nhân. Tất cả các kịch bản nhập dữ liệu bao gồm xác nhận để đảm bảo rằng các dữ
liệu được lưu trữ trong cơ sở dữ liệu là chính xác.
2. Edit by Nhiên IT (www.eg.vnao.vn)
Kỹ năng Bạn sẽ hiểu
Dưới đây là những gì bạn sẽ học:
Làm thế nào để tạo ra một dự án mới ASP.NET MVC.
Làm thế nào để tạo ra ASP.NET MVC bộ điều khiển và quan điểm.
Làm thế nào để tạo ra một cơ sở dữ liệu mới bằng cách sử dụng mô hình Entity Framework mã
đầu tiên.
Làm thế nào để lấy và hiển thị dữ liệu.
Làm thế nào để chỉnh sửa dữ liệu và cho phép xác nhận dữ liệu.
Bắt đầu
3. Edit by Nhiên IT (www.eg.vnao.vn)
Bắt đầu bằng cách chạy Visual Web Developer 2010 Express ("Visual Web Developer" cho ngắn) và
chọn New Project từ bắt đầu trang.
Visual Web Developer là một IDE, hoặc môi trường phát triển tích hợp. Cũng giống như bạn sử dụng
Microsoft Word để viết các tài liệu, bạn sẽ sử dụng một IDE để tạo ra các ứng dụng. Trong Visual Web
Developer có một thanh công cụ dọc theo phía trên hiển thị các tùy chọn khác nhau có sẵn cho
bạn. Ngoài ra còn có một menu cung cấp một cách khác để thực hiện các nhiệm vụ trong IDE. (Ví dụ,
thay vì chọn New Project từ bắt đầu trang, bạn có thể sử dụng menu và chọn file > New Project ).
Tạo ứng dụng đầu tiên của bạn
Bạn có thể tạo ra các ứng dụng bằng cách sử dụng Visual C # là ngôn ngữ lập trình Basic hoặc
Visual. Chọn Visual C # trên bên trái và sau đó chọn ASP.NET MVC ứng dụng Web 3 . Tên dự án của
bạn "MvcMovie" và sau đó nhấnOK . (Nếu bạn thích Visual Basic, chuyển sang phiên bản Visual
Basic của hướng dẫn này.)
4. Edit by Nhiên IT (www.eg.vnao.vn)
Trong các mới ASP.NET MVC 3 Dự án hộp thoại, chọn ứng dụng Internet . Kiểm tra Sử dụng
HTML5 đánh dấuvà để lại Razor như các công cụ xem mặc định.
5. Edit by Nhiên IT (www.eg.vnao.vn)
Nhấp vào OK . Visual Web Developer sử dụng một mẫu mặc định cho dự án ASP.NET MVC mà bạn
vừa tạo ra, vì vậy bạn có một ứng dụng làm việc ngay bây giờ mà không làm bất cứ điều gì! Đây là
một "Hello World!" Đơn giảndự án, và đó là một nơi tốt để bắt đầu ứng dụng của bạn.
6. Edit by Nhiên IT (www.eg.vnao.vn)
Từ Gỡ lỗi trình đơn, chọn Start Debugging .
Chú ý rằng các phím tắt bàn phím để bắt đầu gỡ lỗi là F5.
7. Edit by Nhiên IT (www.eg.vnao.vn)
F5 gây ra Visual Web Developer để bắt đầu một máy chủ phát triển web và chạy các ứng dụng web
của bạn. Visual Web Developer sau đó ra mắt một trình duyệt và mở trang chủ của ứng dụng. Chú ý
rằng thanh địa chỉ của trình duyệt nói localhost một cái gì đó và không phải như example.com . Đó
là bởi vì localhost luôn luôn chỉ vào máy tính của riêng bạn, trong trường hợp này đang chạy các
ứng dụng mà bạn chỉ được xây dựng. Khi Visual Web Developer chạy một dự án web, một cổng ngẫu
nhiên được sử dụng cho máy chủ web. Trong hình dưới đây, số cổng ngẫu nhiên là 43.246. Khi bạn
chạy các ứng dụng, có thể bạn sẽ thấy một số cổng khác nhau.
Phải ra khỏi hộp mẫu mặc định này cung cấp cho bạn hai trang để truy cập và đăng nhập một trang
cơ bản. Bước tiếp theo là thay đổi ứng dụng này hoạt động như thế nào và tìm hiểu một chút về
ASP.NET MVC trong quá trình này. Đóng trình duyệt của bạn và hãy thay đổi một số mã.
2. Adding a Controller(C#)
MVC là viết tắt của mô hình điều khiển xem . MVC là một mô hình để phát triển các ứng dụng có kiến
trúc tốt và dễ dàng để duy trì. Các ứng dụng dựa trên MVC-chứa:
Điều khiển: Lớp học có thể xử lý các yêu cầu đến ứng dụng, lấy mô hình dữ liệu, và sau đó xác
định mẫu xem mà trả lại một phản ứng cho khách hàng.
Mô hình: Các lớp đại diện cho các dữ liệu của các ứng dụng rằng logic và xác nhận sử dụng để
thực thi các quy tắc kinh doanh cho rằng dữ liệu.
8. Edit by Nhiên IT (www.eg.vnao.vn)
Lần đọc: Template các tập tin mà ứng dụng của bạn sử dụng để tự động tạo ra các phản ứng
HTML.
Chúng tôi sẽ bao gồm tất cả các khái niệm này trong loạt bài hướng dẫn này và cho bạn thấy làm thế
nào để sử dụng chúng để xây dựng một ứng dụng.
Hãy bắt đầu bằng cách tạo ra một lớp điều khiển. Trong Solution Explorer , kích chuột phải vào điều
khiển thư mục và sau đó chọn Thêm điều khiển .
Tên bộ điều khiển mới của bạn "HelloWorldController". Để lại mẫu mặc định như bộ điều khiển
trống và nhấn Add.
9. Edit by Nhiên IT (www.eg.vnao.vn)
Chú ý trong Solution Explorer rằng một tập tin mới đã được tạo ra có
tên HelloWorldController.cs . File được mở trong IDE.
10. Edit by Nhiên IT (www.eg.vnao.vn)
Bên trong khối public class HelloWorldController , tạo ra hai phương pháp mà trông giống
như các mã sau đây. Bộ điều khiển sẽ trả về một chuỗi của HTML như là một ví dụ.
using System.Web;
using System.Web.Mvc;
namespace MvcMovie.Controllers
{
public class HelloWorldController : Controller
{
//
// GET: /HelloWorld/
public string Index()
{
return "This is my <b>default</b> action...";
}
11. Edit by Nhiên IT (www.eg.vnao.vn)
//
// GET: /HelloWorld/Welcome/
public string Welcome()
{
return "This is the Welcome action method...";
}
}
}
Điều khiển của bạn được đặt tên là HelloWorldController và phương pháp đầu tiên ở trên được
đặt tên là Index. Hãy để gọi nó từ một trình duyệt. Chạy ứng dụng (nhấn F5 hoặc Ctrl + F5). Trong
trình duyệt, thêm "HelloWorld" đường dẫn trong thanh địa chỉ. (Ví dụ, trong hình minh họa dưới đây,
nó http://localhost:43246/HelloWorld. ) trang trong trình duyệt sẽ trông giống như hình bên
dưới. Trong các phương pháp trên, các mã trả về một chuỗi trực tiếp. Bạn nói với hệ thống chỉ trả lại
một số HTML, và nó đã làm!
ASP.NET MVC gọi các lớp điều khiển khác nhau (và phương pháp hành động khác nhau trong họ) tùy
thuộc vào URL đến. Logic lập bản đồ mặc định được sử dụng bởi ASP.NET MVC sử dụng một định
dạng như thế này để xác định những mã để gọi:
/[Controller]/[ActionName]/[Parameters]
12. Edit by Nhiên IT (www.eg.vnao.vn)
Phần đầu tiên của URL xác định các lớp điều khiển để thực hiện. Vì vậy, / HelloWorld bản
đồHelloWorldController lớp. Phần thứ hai của URL xác định phương pháp hành động trên lớp để
thực hiện. Vì vậy, / HelloWorld / Index sẽ gây ra Index phương pháp của HelloWorldController lớp
học để thực hiện. Chú ý rằng chúng tôi chỉ phải duyệt đến / HelloWorld và Index phương pháp được
sử dụng mặc định. Điều này là do một phương thức có tên là Index là phương pháp mặc định sẽ
được gọi là một bộ điều khiển nếu chưa quy định rõ ràng.
Duyệt đến http://localhost:xxxx/HelloWorld/Welcome . Các phương pháp Chào mừng bạn chạy và trả
về chuỗi "Đây là phương pháp hành động Chào mừng ...". Việc lập bản đồ mặc định MVC là / [điều
khiển] / [ActionName] / [Parameters] . Cho URL này, bộ điều khiển là HelloWorld và Chào
mừng bạn là phương pháp hành động. Bạn đã không sử dụng [Tham số] một phần của URL.
Hãy để sửa đổi các ví dụ hơi để bạn có thể vượt qua một số thông tin tham số từ URL để điều khiển
(ví dụ, / HelloWorld / Chào mừng các bạn? name = Scott & numtimes = 4 ). Thay đổi của
bạn Welcome phương pháp bao gồm hai thông số như hình dưới đây. Lưu ý rằng mã sử dụng C # tính
năng tùy chọn tham số để chỉ ra rằngnumTimes tham số mặc định 1 nếu không có giá trị của tham số
đó được thông qua.
public string Welcome(string name, int numTimes = 1) {
return HttpUtility.HtmlEncode("Hello " + name + ", NumTimes is: " +
numTimes);
}
13. Edit by Nhiên IT (www.eg.vnao.vn)
Chạy ứng dụng của bạn và duyệt đến URL ví dụ
( http://localhost:xxxx/HelloWorld/Welcome?name=Scott&numtimes=4) . Bạn có thể thử các giá trị
khác nhau cho tên và numtimes trong URL. Hệ thống tự động bản đồ các thông số được đặt tên từ
chuỗi truy vấn trong thanh địa chỉ để các thông số trong phương pháp của bạn.
Trong cả hai ví dụ bộ điều khiển đã được làm "VC" phần của MVC - đó là, quan điểm và công việc
điều khiển. Bộ điều khiển trả về HTML trực tiếp. Thông thường bạn không muốn điều khiển trở về
HTML trực tiếp, từ đó trở nên rất cồng kềnh để mã. Thay vào đó, chúng tôi thường sẽ sử dụng một
tập tin xem mẫu riêng biệt để giúp tạo ra các phản ứng HTML. Hãy xem phần tiếp theo làm thế nào
chúng ta có thể làm điều này.
3.Adding a View(C#)
Trong phần này, bạn sẽ phải sửa đổi HelloWorldController lớp học để sử dụng xem các file mẫu để
sạch đóng gói các quá trình tạo ra các phản ứng HTML với một khách hàng.
Bạn sẽ tạo một tập tin mẫu xem bằng cách sử dụng các công cụ Razor xem mới được giới thiệu với
ASP.NET MVC 3. Mẫu dựa trên Razor xem có một tập tin mở rộng . cshtml , và cung cấp một cách
thanh lịch để tạo đầu ra HTML bằng cách sử dụng C #. Razor giảm thiểu số lượng các ký tự và phím
14. Edit by Nhiên IT (www.eg.vnao.vn)
bấm cần thiết khi viết một mẫu xem, và cho phép một quy trình làm việc, nhanh chóng chất lỏng mã
hóa.
Bắt đầu bằng cách sử dụng một mẫu xem với chỉ số phương pháp trong
các HelloWorldController lớp. Hiện tại,chỉ số phương pháp trả về một chuỗi với một thông điệp
được mã hóa cứng trong lớp điều khiển. Thay đổi Indexphương pháp để trở về một Xem đối tượng,
như thể hiện trong những điều sau đây:
public ActionResult Index()
{
return View();
}
Mã này sử dụng một mẫu xem để tạo ra một phản ứng HTML cho trình duyệt. Trong dự án này, thêm
một mẫu xem mà bạn có thể sử dụng với các chỉ số phương pháp. Để làm điều này, kích chuột phải
vào bên trong chỉ sốphương pháp và nhấn Xem Thêm .
Xem Thêm hộp thoại sẽ xuất hiện. Để mặc định cách họ đang có và nhấp vào Thêm nút:
15. Edit by Nhiên IT (www.eg.vnao.vn)
MvcMovie Views HelloWorld thư mục và các MvcMovie Views HelloWorld Index.cshtml tập tin
được tạo ra. Bạn có thể nhìn thấy chúng trong Solution Explorer :
16. Edit by Nhiên IT (www.eg.vnao.vn)
Sau đây cho thấy Index.cshtml tập tin đã được tạo ra:
17. Edit by Nhiên IT (www.eg.vnao.vn)
Thêm một số HTML theo <h2> tag. Các sửa đổi MvcMovie Views HelloWorld Index.cshtml tập tin
được hiển thị dưới đây.
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>Hello from our View Template!</p>
Chạy các ứng dụng và duyệt đến HelloWorld điều khiển
( http://localhost:xxxx/HelloWorld ). Index phương pháp trong điều khiển của bạn không làm việc
nhiều, nó chỉ đơn giản là chạy các tuyên bố return View () , trong đó quy định rằng phương pháp
nên sử dụng một tập tin mẫu xem để vẽ lại một phản ứng cho trình duyệt. Vì bạn đã không xác định
18. Edit by Nhiên IT (www.eg.vnao.vn)
rõ ràng tên của xem tập tin mẫu để sử dụng, ASP.NET MVC mặc định để sử dụng các tập
tinIndex.cshtml xem trong Views HelloWorld thư mục. Những hình ảnh dưới đây cho thấy các chuỗi
mã hóa cứng trong xem.
Trông khá tốt. Tuy nhiên, chú ý rằng thanh tiêu đề của trình duyệt nói rằng "Index" và tiêu đề lớn trên
trang "ứng dụng MVC của tôi." Hãy thay đổi những.
Thay đổi Lần đọc và Trang Layout
Trước tiên, bạn muốn thay đổi "MVC Application" title ở trên cùng của trang. Văn bản là phổ biến cho
mỗi trang.Nó thực sự được thực hiện chỉ trong một dự án, mặc dù nó xuất hiện trên tất cả các trang
trong ứng dụng. / Xem / chia sẻ thư mục trong Solution Explorer và mở _Layout.cshtml tập tin. Tập
tin này được gọi là một bố trí trang và đó là chia sẻ "vỏ" mà tất cả các trang khác sử dụng.
19. Edit by Nhiên IT (www.eg.vnao.vn)
Mẫu bố trí cho phép bạn chỉ định cách bố trí container HTML của trang web của bạn ở một nơi và sau
đó áp dụng nó trên nhiều trang trong trang web của bạn. Lưu ý RenderBody @ () ở gần cuối của tập
tin. RenderBody là một giữ chỗ nơi tất cả các trang xem cụ thể bạn tạo ra hiển thị, "gói" trong trang
bố trí. Thay đổi tiêu đề nhóm trong các mẫu bố trí từ "Ứng dụng MVC của tôi" "App Movie MVC".
<Div id = "title" >
<h1> MVC Movie App </ h1>
</ div>
20. Edit by Nhiên IT (www.eg.vnao.vn)
Chạy ứng dụng và thông báo rằng nó bây giờ nói "MVC Movie App". Nhấp vào Giới thiệu liên kết, và
bạn thấy trang hiển thị như thế nào "App Movie MVC", quá. Chúng tôi đã có thể thực hiện thay đổi
một lần trong các mẫu bố trí và có tất cả các trang trên trang web phản ánh tên mới.
Việc hoàn thành _Layout.cshtml tập tin được hiển thị dưới đây:
:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>@ViewBag.Title</title>
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet"
type="text/css" />
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")"
type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/modernizr-1.7.min.js")"
type="text/javascript"></script>
</head>
<body>
<div class="page">
<header>
<div id="title">
<h1>MVC Movie App</h1>
</div>
<div id="logindisplay">
@Html.Partial("_LogOnPartial")
</div>
<nav>
<ul id="menu">
21. Edit by Nhiên IT (www.eg.vnao.vn)
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
</ul>
</nav>
</header>
<section id="main">
@RenderBody()
</section>
<footer>
</footer>
</div>
</body>
</html>
Bây giờ, chúng ta hãy thay đổi tiêu đề của trang Index (xem).
Mở MvcMovie Views HelloWorld Index.cshtml . Có hai địa điểm để thực hiện một thay đổi: thứ
nhất, các văn bản xuất hiện trong tiêu đề của trình duyệt, và sau đó trong tiêu đề phụ ( <h2> nguyên
tố). Bạn sẽ làm cho họ hơi khác nhau, do đó bạn có thể nhìn thấy chút thay đổi mã một phần của ứng
dụng này.
@{
ViewBag.Title = "Movie List";
}
<h2>My Movie List</h2>
<p>Hello from our View Template!</p>
Để chỉ ra tiêu đề HTML để hiển thị, các mã trên đặt một Văn bằng tài sản của ViewBag đối tượng (đó
là trong xem mẫu Index.cshtml ). Nếu bạn nhìn vào mã nguồn của mẫu bố trí, bạn sẽ nhận thấy rằng
các bản mẫu sử dụng giá trị này trong các yếu tố <title> một phần của <head> phần của HTML. Sử
dụng phương pháp này, bạn có thể dễ dàng vượt qua các thông số khác giữa mẫu xem của bạn và bố
trí tập tin của bạn.
Chạy ứng dụng và duyệt đến http://localhost:xx/HelloWorld . Chú ý rằng tiêu đề trình duyệt, tiêu đề
chính, và các nhóm thứ đã thay đổi. (Nếu bạn không thấy các thay đổi trong trình duyệt, bạn có thể
xem nội dung được lưu trong bộ nhớ cache Nhấn Ctrl + F5 trong trình duyệt của bạn để buộc các
phản hồi từ máy chủ để được nạp).
Cũng nhận thấy như thế nào nội dung trong Index.cshtml mẫu xem được sáp nhập
với _Layout.cshtml xem mẫu và một phản ứng duy nhất HTML đã được gửi tới trình duyệt. Mẫu bố trí
làm cho nó rất dễ dàng để thực hiện các thay đổi được áp dụng trên tất cả các trang trong ứng dụng
của bạn.
22. Edit by Nhiên IT (www.eg.vnao.vn)
Chút của chúng tôi "dữ liệu" (trong trường hợp này "Hello từ Mẫu của chúng tôi!" Tin nhắn) được mã
hóa cứng, mặc dù. Ứng dụng MVC có một "V" (xem) và bạn đã có một "C" (điều khiển), nhưng không
có "M" (mô hình) chưa.Thời gian ngắn, chúng tôi sẽ đi bộ qua làm thế nào tạo ra một cơ sở dữ liệu và
lấy mô hình dữ liệu từ nó.
Qua dữ liệu từ Controller cho View
Trước khi chúng tôi đi đến một cơ sở dữ liệu và nói chuyện về các mô hình, mặc dù, chúng ta hãy nói
chuyện đầu tiên về việc chuyển giao thông tin từ bộ điều khiển để một lần xem. Các lớp điều khiển
được gọi để đáp ứng một yêu cầu URL đến. Một lớp học điều khiển là nơi bạn viết mã để xử lý các
thông số đầu vào, lấy dữ liệu từ một cơ sở dữ liệu, và cuối cùng quyết định loại phản ứng để gửi lại
cho trình duyệt. Mẫu xem sau đó có thể được sử dụng từ một bộ điều khiển để tạo ra và định dạng
HTML trả về cho trình duyệt.
Bộ điều khiển có trách nhiệm cung cấp bất cứ dữ liệu hoặc đối tượng được yêu cầu để cho một mẫu
xem để vẽ lại một phản ứng cho trình duyệt. Mẫu xem không bao giờ nên thực hiện logic kinh doanh
hoặc tương tác với một cơ sở dữ liệu trực tiếp. Thay vào đó, nó sẽ chỉ làm việc với các dữ liệu đó là
cung cấp cho nó bởi bộ điều khiển. Duy trì "tách mối quan tâm" giúp giữ mã của bạn sạch sẽ và duy
trì nhiều hơn.
Hiện nay, Chào mừng phương pháp hành động trong các HelloWorldController lớp có một tên và
một numTimestham số và sau đó kết quả đầu ra các giá trị trực tiếp cho trình duyệt. Thay vì có bộ
điều khiển làm cho các phản ứng này như là một chuỗi, hãy thay đổi bộ điều khiển để sử dụng một
mẫu xem thay vì. Các mẫu xem sẽ tạo ra một phản ứng năng động, có nghĩa là bạn cần phải vượt qua
các bit dữ liệu thích hợp từ bộ điều khiển để xem để tạo ra các phản ứng. Bạn có thể làm điều này
bằng cách điều khiển đặt các dữ liệu động mẫu xem nhu cầu trong mộtViewBag đối tượng mà mẫu
xem sau đó có thể truy cập.
Quay trở lại với HelloWorldController.cs tập tin và thay đổi phương pháp Chào mừng thêm một tin
nhắn vàNumTimes giá trị đến ViewBag đối tượng. ViewBag là một đối tượng năng động, có nghĩa là
bạn có thể đặt bất cứ điều gì bạn muốn trong nó, các ViewBag đối tượng đã không được xác định
23. Edit by Nhiên IT (www.eg.vnao.vn)
thuộc tính cho đến khi bạn đặt một cái gì đó bên trong nó. HelloWorldController.cs tập tin hoàn
chỉnh trông như thế này:
using System.Web;
using System.Web.Mvc;
namespace MvcMovie.Controllers
{
public class HelloWorldController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Welcome(string name, int numTimes = 1)
{
ViewBag.Message = "Hello " + name;
ViewBag.NumTimes = numTimes;
return View();
}
}
}
Bây giờ ViewBag đối tượng chứa dữ liệu đó sẽ được thông qua để xem tự động.
Tiếp theo, bạn cần một mẫu xem Chào mừng bạn! Trong Gỡ lỗi trình đơn, chọn Xây dựng
MvcMovie để đảm bảo dự án được biên dịch.
24. Edit by Nhiên IT (www.eg.vnao.vn)
Sau đó, kích chuột phải vào bên trong các phương pháp Welcome và nhấn Xem Thêm . Đây là những
gì Xem Thêm hộp thoại trông giống như:
25. Edit by Nhiên IT (www.eg.vnao.vn)
Nhấp vào Thêm , và sau đó thêm mã sau đây theo các yếu tố <h2> mới Welcome.cshtml tập
tin. Bạn sẽ tạo ra một vòng lặp mà nói "Hello" nhiều lần khi người sử dụng nói rằng họ nên. Việc hoàn
thành Welcome.cshtml tập tin được hiển thị dưới đây.
@{
ViewBag.Title = "Welcome";
}
<h2>Welcome</h2>
<ul>
@for (int i=0; i < ViewBag.NumTimes; i++) {
<li>@ViewBag.Message</li>
}
</ul>
Chạy ứng dụng và trình duyệt vào URL sau:
http://localhost:xx/HelloWorld/Welcome?name=Scott&numtimes=4
26. Edit by Nhiên IT (www.eg.vnao.vn)
Bây giờ dữ liệu được lấy từ địa chỉ URL và thông qua bộ điều khiển tự động. Điều khiển các gói dữ liệu
thành mộtViewBag đối tượng và vượt qua đối tượng để xem. Xem sau đó hiển thị dữ liệu dưới dạng
HTML cho người dùng.
Vâng, đó là một loại "M" cho mô hình, nhưng không phải là loại cơ sở dữ liệu. Chúng ta hãy xem
những gì chúng tôi đã học được và tạo ra một cơ sở dữ liệu của phim.
4.Adding a Model(C#)
Thêm một mô hình
Trong phần này, bạn sẽ thêm một số lớp học để quản lý phim trong cơ sở dữ liệu. Những lớp này sẽ
là "mô hình" một phần của ứng dụng ASP.NET MVC.
Bạn sẽ sử dụng NET Framework công nghệ truy cập dữ liệu được gọi là Entity Framework để xác định
và làm việc với các lớp mô hình này. Entity Framework (thường được gọi là EF) hỗ trợ một mô hình
phát triển được gọi là mã đầu tiên . Mã đầu tiên cho phép bạn tạo các đối tượng mô hình bằng cách
viết các lớp học đơn giản. (Đây là cũng được biết đến như là các lớp POCO, từ "đối tượng CLR đồng
bằng cũ.") Sau đó, bạn có thể có cơ sở dữ liệu được tạo ra trên bay từ các lớp học của bạn, cho phép
một công việc rất sạch sẽ và nhanh chóng phát triển.
Thêm các lớp mô hình
Trong Solution Explorer , nhấp chuột phải vào Mô hình thư mục, chọn Add , và sau đó chọn lớp .
28. Edit by Nhiên IT (www.eg.vnao.vn)
Thêm các thuộc tính sau cho Movie lớp:
public class Movie
{
public int ID { get; set; }
public string Title { get; set; }
public DateTime ReleaseDate { get; set; }
public string Genre { get; set; }
public decimal Price { get; set; }
}
Chúng tôi sẽ sử dụng Movie lớp học để đại diện cho các phim trong cơ sở dữ liệu. Mỗi thể hiện của
một đối tượngMovie sẽ tương ứng với một dòng trong một bảng cơ sở dữ liệu, và mỗi tài sản
của Movie lớp bản đồ một cột trong bảng.
Trong cùng một tập tin, thêm MovieDBContext lớp sau :
29. Edit by Nhiên IT (www.eg.vnao.vn)
public class MovieDBContext : DbContext
{
public DbSet<Movie> Movies { get; set; }
}
MovieDBContext lớp đại diện cho cơ sở dữ liệu Entity Framework bối cảnh phim, mà xử lý lấy, lưu trữ
và cập nhật các trường lớp phim trong cơ sở dữ liệu. MovieDBContext xuất phát từ DbContext lớp cơ
sở được cung cấp bởi Entity Framework. Để biết thêm thông tin về DbContext và DbSet , cải thiện
năng suất cho Entity Framework .
Để có thể tham khảo DbContext và DbSet , bạn cần phải thêm những điều sau đây bằng cách sử
dụng báo cáo ở phía trên cùng của tập tin:
using System.Data.Entity;
Movie.cs tập tin hoàn chỉnh được hiển thị dưới đây.
using System;
using System.Data.Entity;
namespace MvcMovie.Models
{
public class Movie
{ public int ID { get; set; }
public string Title { get; set; } public DateTime ReleaseDate {
get; set; } public string Genre { get; set; }
public decimal Price { get; set; } }
public class MovieDBContext : DbContext
{
public DbSet<Movie> Movies { get; set; }
}
}
Tạo một chuỗi kết nối và làm việc với SQL Server Compact
MovieDBContext lớp mà bạn đã tạo xử lý các nhiệm vụ kết nối với cơ sở dữ liệu và bản đồ Movie
các đối tượng bản ghi cơ sở dữ liệu. Một câu hỏi bạn có thể hỏi, mặc dù, là làm thế nào để xác định
cơ sở dữ liệu nó sẽ kết nối.Bạn sẽ làm điều đó bằng cách thêm thông tin kết nối trong các tập
tin Web.config của ứng dụng.
Mở ứng dụng tập tin Web.config gốc . (Không phải Web.config tập tin trong các lần xem thư mục)
Những hình ảnh dưới đây cho thấy cả hai Web.config các tập tin, mở các tập tin Web.config vòng tròn
màu đỏ.
30. Edit by Nhiên IT (www.eg.vnao.vn)
Thêm chuỗi kết nối sau đây để <connectionStrings> yếu tố trong các tập tin Web.config .
<add name="MovieDBContext"
connectionString="Data Source=|DataDirectory|Movies.sdf"
providerName="System.Data.SqlServerCe.4.0"/>
Ví dụ sau đây cho thấy một phần của tập tin Web.config với chuỗi kết nối mới được thêm vào:
<configuration>
<connectionStrings>
<add name="MovieDBContext"
connectionString="Data Source=|DataDirectory|Movies.sdf"
providerName="System.Data.SqlServerCe.4.0"/>
<add name="ApplicationServices"
connectionString="data source=.SQLEXPRESS;Integrated
Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
providerName="System.Data.SqlClient" />
</connectionStrings>
Số lượng nhỏ của mã và XML là tất cả mọi thứ bạn cần phải viết để đại diện và lưu trữ dữ liệu phim
trong cơ sở dữ liệu.
Tiếp theo, bạn sẽ xây dựng mới MoviesController lớp học mà bạn có thể sử dụng để hiển thị các dữ
liệu phim và cho phép người dùng tạo ra các danh sách phim mới.
31. Edit by Nhiên IT (www.eg.vnao.vn)
5.Accessing your Model's Data from a
Controller(C#)
Trong phần này, bạn sẽ tạo ra một lớp MoviesController mới và viết code để lấy dữ liệu phim và
hiển thị nó trong trình duyệt bằng cách sử dụng một mẫu xem. Hãy chắc chắn để xây dựng ứng dụng
của bạn trước khi tiếp tục.
Kích chuột phải vào thư mục Controllers và tạo một hình mới MoviesController điều khiển. Chọn
các tùy chọn sau đây:
Bộ điều khiển tên: MoviesController . (Điều này là mặc định).
Bản mẫu: điều khiển đọc / ghi các hành động và quan điểm, sử dụng Entity Framework .
Mô hình lớp: Movie (MvcMovie.Models) .
Dữ liệu bối cảnh lớp: MovieDBContext (MvcMovie.Models) .
Lần đọc: Razor (CSHTML) . (Mặc định).
Nhấp vào Thêm . Visual Web Developer tạo ra các tập tin và thư mục sau đây:
Một MoviesController.cs tập tin trong thư mục Controllers của dự án .
Một phim trong thư mục của dự án Lần đọc thư mục.
Create.cshtml, Delete.cshtml, Details.cshtml, Edit.cshtml , và Index.cshtml mới Xem Phim thư mục.
33. Edit by Nhiên IT (www.eg.vnao.vn)
ASP.NET MVC 3 giàn giáo cơ chế tự động tạo ra các CRUD (tạo, đọc, cập nhật, và xóa) phương pháp
hành động và quan điểm cho bạn. Bây giờ bạn có một ứng dụng web đầy đủ chức năng cho phép
bạn tạo ra, danh sách, chỉnh sửa, và xóa các mục phim.
Chạy các ứng dụng và duyệt đến Phim bộ điều khiển bằng cách phụ thêm / Phim URL trong thanh địa
chỉ của trình duyệt của bạn. Do việc áp dụng dựa trên định tuyến mặc định (được định nghĩa trong
các tập tin Global.asax ), trình duyệt yêu cầu http://localhost:xxxxx/Movies được định tuyến mặc
định chỉ số phương pháp hành động của các phimđiều khiển. Nói cách khác, trình duyệt yêu
cầu http://localhost:xxxxx/Movies là có hiệu quả tương tự như yêu cầu trình
duyệt http://localhost:xxxxx/Movies/Index . Kết quả là một danh sách trống của phim ảnh, bởi vì bạn đã
không được thêm bất kỳ chưa.
Tạo một Movie
Chọn liên kết Create New . Nhập một số thông tin chi tiết về một bộ phim và sau đó nhấp
vào Create nút.
34. Edit by Nhiên IT (www.eg.vnao.vn)
Nhấp vào Tạo nút gây ra biểu mẫu để được gửi đến máy chủ, nơi mà các thông tin về phim được lưu
trong cơ sở dữ liệu. Sau đó bạn sẽ được chuyển hướng đến / Phim URL, nơi bạn có thể xem bộ phim
mới được tạo ra trong danh sách.
35. Edit by Nhiên IT (www.eg.vnao.vn)
Tạo các mục phim một vài chi tiết. Hãy thử Chỉnh sửa , chi tiết , và Xóa liên kết, mà là tất cả các chức
năng.
Kiểm tra các mã được tạo ra
Mở Controllers tập tin MoviesController.cs và kiểm tra các phương pháp tạo ra Index . Một phần của
bộ điều khiển bộ phim với các chỉ số phương pháp được hiển thị dưới đây.
public class MoviesController : Controller
{
private MovieDBContext db = new MovieDBContext();
//
// GET: /Movies/
public ViewResult Index()
{
return View(db.Movies.ToList());
}
Các dòng sau từ MoviesController lớp khởi tạo một bối cảnh cơ sở dữ liệu phim, như được mô tả
trước đây. Bạn có thể sử dụng bối cảnh cơ sở dữ liệu phim để truy vấn, chỉnh sửa, và xóa phim.
private MovieDBContext db = new MovieDBContext();
36. Edit by Nhiên IT (www.eg.vnao.vn)
Một yêu cầu cho Phim bộ điều khiển trả về tất cả các mục trong Phim bảng của cơ sở dữ liệu phim và
sau đó vượt qua kết quả Index xem.
Mạnh mẽ đánh máy Mô hình và mô hình Từ khoá @
Trước đó, trong hướng dẫn này, bạn đã thấy làm thế nào một bộ điều khiển có thể truyền dữ liệu
hoặc các đối tượng cho một mẫu xem sử dụng ViewBag đối tượng. Các ViewBag là một đối tượng
năng động, cung cấp một cách thuận tiện cuối ràng buộc để vượt qua thông tin để một lần xem.
ASP.NET MVC cũng cung cấp khả năng truyền dữ liệu mạnh mẽ đánh máy hoặc các đối tượng cho
một mẫu xem.Cách tiếp cận này mạnh mẽ đánh máy cho phép kiểm tra thời gian biên dịch của mã
của bạn và IntelliSense phong phú hơn trong trình soạn thảo Visual Web Developer. Chúng tôi đang
sử dụng phương pháp này với các lớp vàxem Index.cshtml mẫu MoviesController .
Chú ý cách mã tạo ra một Danh sách đối tượng khi nó gọi Xem phương pháp trợ giúp
trong Index phương pháp hành động. Các mã sau đó vượt qua danh sách phim từ bộ điều khiển để
xem:
public ViewResult Index()
{
return View(db.Movies.ToList());
}
Bằng cách bao gồm một mô hình @ tuyên bố ở trên cùng của tập tin mẫu xem, bạn có thể chỉ định
các loại đối tượng mà xem mong đợi. Khi bạn tạo ra bộ điều khiển bộ phim, Visual Web Developer tự
động bao gồm những điều sau đây @ mô hình tuyên bố ở trên cùng của các tập tin Index.cshtml :
@model IEnumerable<MvcMovie.Models.Movie>
Mô hình @ chỉ thị này cho phép bạn truy cập vào danh sách các phim bộ điều khiển thông qua để
xem bằng cách sử dụng một mô hình đối tượng mạnh mẽ đánh máy. Ví dụ, trong Index.cshtml mẫu,
mã vòng qua các bộ phim bằng cách thực hiện một tuyên bố foreach qua mô hình đối tượng mạnh
mẽ đánh máy :
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Title)
</td>
<td>
@Html.DisplayFor(modelItem => item.ReleaseDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.Genre)
</td>
<td>
@Html.DisplayFor(modelItem => item.Price)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
@Html.ActionLink("Details", "Details", new { id=item.ID }) |
@Html.ActionLink("Delete", "Delete", new { id=item.ID })
37. Edit by Nhiên IT (www.eg.vnao.vn)
</td>
</tr>
}
Bởi vì các mô hình đối tượng mạnh mẽ đánh máy (như là một đối tượng IEnumerable <Movie> ),
mỗi mục đối tượng trong vòng lặp được gõ là Movie . Trong số các lợi ích khác, điều này có nghĩa là
bạn sẽ có được thời gian biên dịch kiểm tra của mã và hỗ trợ IntelliSense đầy đủ trong trình soạn thảo
mã:
Làm việc với SQL Server Compact
Mã Entity Framework Đầu tiên phát hiện rằng chuỗi kết nối cơ sở dữ liệu đã được cung cấp chỉ cho
một phim cơ sở dữ liệu không tồn tại được nêu, do đó Mã Đầu tiên tạo ra cơ sở dữ liệu tự động. Bạn
có thể xác minh rằng nó được tạo ra bằng cách tìm kiếm trong các thư mục App_Data . Nếu bạn
không nhìn thấy tập tin Movies.sdf , nhấp vàoShow All Files nút trong Solution Explorer trên thanh
công cụ, nhấp vào Refresh nút, và sau đó mở rộngApp_Data thư mục.
38. Edit by Nhiên IT (www.eg.vnao.vn)
Double-click Movies.sdf để mở Server Explorer . Sau đó, mở rộng Bàn thư mục để xem các bảng đã
được tạo ra trong cơ sở dữ liệu.
Lưu ý Nếu bạn nhận được một lỗi khi bạn nhấp đúp vào Movies.sdf , hãy chắc chắn rằng bạn đã
cài đặt SQL Server Compact 4.0 (thời gian chạy + công cụ hỗ trợ). (Đối với các liên kết đến các phần
mềm, hãy xem danh sách các điều kiện tiên quyết trong phần 1 của loạt bài hướng dẫn này.) Nếu bạn
cài đặt phát hành ngay bây giờ, bạn sẽ phải đóng cửa và mở lại Visual Web Developer.
Có hai bảng, một cho phim bộ thực thể và sau đó EdmMetadata bảng. The EdmMetadata bảng được
sử dụng bởi các khung thực thể để xác định khi các mô hình và cơ sở dữ liệu không đồng bộ.
Kích chuột phải vào Phim bảng và chọn Hiển thị Bảng dữ liệu để xem dữ liệu mà bạn đã tạo.
39. Edit by Nhiên IT (www.eg.vnao.vn)
Kích chuột phải vào Phim bảng và chọn Chỉnh sửa Schema Bảng .
40. Edit by Nhiên IT (www.eg.vnao.vn)
Chú ý các lược đồ của phim bản đồ bảng với Movie lớp bạn tạo ra trước đó. Mã Entity Framework Đầu
tiên tự động tạo ra lược đồ này cho bạn dựa trên Movie lớp.
Khi bạn hoàn tất, đóng kết nối. (Nếu bạn không đóng kết nối, bạn có thể nhận được một lỗi lần sau
khi bạn chạy các dự án).
41. Edit by Nhiên IT (www.eg.vnao.vn)
Bây giờ bạn có cơ sở dữ liệu và niêm yết một trang đơn giản để hiển thị nội dung từ nó. Trong hướng
dẫn tiếp theo, chúng tôi sẽ kiểm tra phần còn lại của các mã scaffolded và thêm
một SearchIndex phương pháp và mộtSearchIndex xem cho phép bạn tìm kiếm cho các bộ phim
trong cơ sở dữ liệu này.
6. Kiểm tra các phương pháp chỉnh sửa và
xem Sửa(C #)
7. Trong phần này, bạn sẽ xem xét các phương pháp hành động tạo ra và quan điểm cho bộ
điều khiển bộ phim. Sau đó, bạn sẽ thêm một trang tìm kiếm tùy chỉnh.
8. Chạy các ứng dụng và duyệt đến Phim bộ điều khiển bằng cách phụ thêm / Phim URL trong
thanh địa chỉ của trình duyệt của bạn. Giữ con trỏ chuột trên một liên kết Sửa để xem URL mà
nó liên kết đến.
42. Edit by Nhiên IT (www.eg.vnao.vn)
9.
10. The Sửa liên kết được tạo ra bởi các phương pháp Html.ActionLink trong Views Phim
Index.cshtml xem:
11. @Html.ActionLink("Edit", "Edit", new { id=item.ID })
12.
Html đối tượng là một người trợ giúp đó là tiếp xúc bằng cách sử dụng một tài sản trên
các WebViewPage lớp cơ sở. ActionLink phương pháp của người trợ giúp làm cho nó dễ dàng để tự
động tạo ra các siêu liên kết HTML liên kết với các phương pháp hành động trên bộ điều khiển. Đối số
đầu tiên để ActionLink phương pháp là văn bản liên kết để render (ví dụ, <a> Chỉnh sửa Me </
a> ). Đối số thứ hai là tên của phương pháp hành động để gọi. Đối số cuối cùng là một đối tượng vô
danh mà tạo ra các dữ liệu tuyến đường (trong trường hợp này, ID của 4).
Các liên kết tạo ra được hiển thị trong hình ảnh trước đó là http://localhost:xxxxx/Movies/Edit/4 . Các
tuyến đường mặc định có mẫu URL {controller} / {action} / {id} . Vì vậy, ASP.NET
dịch http://localhost:xxxxx/Movies/Edit/4thành một yêu cầu để Sửa phương pháp hành động
của Phim bộ điều khiển với tham số ID bằng 4.
Bạn cũng có thể vượt qua các thông số phương pháp hành động bằng cách sử dụng một chuỗi truy
vấn. Ví dụ, URLhttp://localhost:xxxxx/Movies/Edit?ID=4 cũng vượt qua các tham số ID của
4 Sửa phương pháp hành động của Phimbộ điều khiển.
43. Edit by Nhiên IT (www.eg.vnao.vn)
Mở Phim bộ điều khiển. Hai Chỉnh sửa phương pháp hành động được hiển thị bên dưới.
//
// GET: /Movies/Edit/5
public ActionResult Edit(int id)
{
Movie movie = db.Movies.Find(id);
return View(movie);
}
//
// POST: /Movies/Edit/5
[HttpPost]
44. Edit by Nhiên IT (www.eg.vnao.vn)
public ActionResult Edit(Movie movie)
{
if (ModelState.IsValid)
{
db.Entry(movie).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(movie);
}
Chú ý thứ hai Chỉnh sửa phương pháp hành động trước bởi HttpPost thuộc tính. Thuộc tính này xác
định rằng tình trạng quá tải của các phương pháp Sửa có thể chỉ được gọi cho các yêu cầu POST. Bạn
có thể áp dụng các thuộc tính HttpGet phương pháp chỉnh sửa đầu tiên, nhưng đó không phải là cần
thiết vì nó là mặc định. (Chúng tôi sẽ tham khảo các phương pháp hành động được mặc nhiên được
giao HttpGet thuộc tính như là phương phápHttpGet ).
Phương pháp Sửa HttpGet có phim tham số ID, nhìn lên phim bằng cách sử dụng khung
Entity Tìm phương pháp, và trả về bộ phim được lựa chọn để xem Edit. Khi hệ thống giàn giáo tạo ra
xem Sửa, kiểm tra Movie lớp và tạo ra mã để render <label> và <input> yếu tố cho mỗi thuộc tính
của lớp. Ví dụ sau đây cho thấy xem Sửa đã được tạo ra:
@model MvcMovie.Models.Movie
@{
ViewBag.Title = "Edit";
}
<h2>Edit</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")"
type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"
type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Movie</legend>
@Html.HiddenFor(model => model.ID)
<div class="editor-label">
@Html.LabelFor(model => model.Title)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Title)
@Html.ValidationMessageFor(model => model.Title)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ReleaseDate)
45. Edit by Nhiên IT (www.eg.vnao.vn)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ReleaseDate)
@Html.ValidationMessageFor(model => model.ReleaseDate)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Genre)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Genre)
@Html.ValidationMessageFor(model => model.Genre)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Price)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Price)
@Html.ValidationMessageFor(model => model.Price)
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
Chú ý mẫu xem có một mô hình MvcMovie.Models.Movie @ tuyên bố ở trên cùng của tập tin này
xác định xem dự kiến mô hình cho các mẫu xem được loại phim .
Mã scaffolded sử dụng một số phương pháp giúp đỡ để sắp xếp các đánh dấu
HTML. Html.LabelFor helper hiển thị tên của trường ("Tiêu đề", "phát hành", "Thể loại nhạc", hoặc
"Giá"). Các Html.EditorFor helper hiển thị một yếu
tố <input> HTML . Html.ValidationMessageFor helper hiển thị bất kỳ thông báo xác nhận liên
quan đến tài sản đó.
Chạy ứng dụng và điều hướng đến / Phim URL. Nhấp một Sửa liên kết. Trong trình duyệt, xem mã
nguồn cho trang.HTML trong trang trông giống như ví dụ sau đây. (Các đánh dấu menu đã được loại
trừ cho rõ ràng).
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Edit</title>
<link href="/Content/Site.css" rel="stylesheet" type="text/css" />
<script src="/Scripts/jquery-1.5.1.min.js" type="text/javascript"></script>
46. Edit by Nhiên IT (www.eg.vnao.vn)
<script src="/Scripts/modernizr-1.7.min.js" type="text/javascript"></script>
</head>
<body>
<div class="page">
<header>
<div id="title">
<h1>MVC Movie App</h1>
</div>
...
</header>
<section id="main">
<h2>Edit</h2>
<script src="/Scripts/jquery.validate.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.unobtrusive.min.js"
type="text/javascript"></script>
<form action="/Movies/Edit/4" method="post"> <fieldset>
<legend>Movie</legend>
<input data-val="true" data-val-number="The field ID must be a number."
data-val-required="The ID field is required." id="ID" name="ID"
type="hidden" value="4" />
<div class="editor-label">
<label for="Title">Title</label>
</div>
<div class="editor-field">
<input class="text-box single-line" id="Title" name="Title"
type="text" value="Rio Bravo" />
<span class="field-validation-valid" data-valmsg-for="Title" data-
valmsg-replace="true"></span>
</div>
<div class="editor-label">
<label for="ReleaseDate">ReleaseDate</label>
</div>
<div class="editor-field">
<input class="text-box single-line" data-val="true" data-val-
required="The ReleaseDate field is required."
id="ReleaseDate" name="ReleaseDate" type="text" value="4/15/1959
12:00:00 AM" />
<span class="field-validation-valid" data-valmsg-for="ReleaseDate"
data-valmsg-replace="true"></span>
</div>
<div class="editor-label">
<label for="Genre">Genre</label>
47. Edit by Nhiên IT (www.eg.vnao.vn)
</div>
<div class="editor-field">
<input class="text-box single-line" id="Genre" name="Genre"
type="text" value="Western" />
<span class="field-validation-valid" data-valmsg-for="Genre" data-
valmsg-replace="true"></span>
</div>
<div class="editor-label">
<label for="Price">Price</label>
</div>
<div class="editor-field">
<input class="text-box single-line" data-val="true" data-val-
number="The field Price must be a number."
data-val-required="The Price field is required." id="Price"
name="Price" type="text" value="9.99" />
<span class="field-validation-valid" data-valmsg-for="Price" data-
valmsg-replace="true"></span>
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
</form>
<div>
<a href="/Movies">Back to List</a>
</div>
</section>
<footer>
</footer>
</div>
</body>
</html>
<input> các yếu tố trong một HTML <form> yếu tố có hành động thuộc tính được thiết lập để gửi /
Phim ảnh / EditURL. Các dữ liệu mẫu sẽ được gửi đến máy chủ khi Sửa nút được nhấp.
Xử lý các yêu cầu POST
Danh sách sau đây cho thấy HttpPost phiên bản của phương pháp hành động Sửa .
[HttpPost]
public ActionResult Edit(Movie movie)
{
if (ModelState.IsValid)
{
db.Entry(movie).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
48. Edit by Nhiên IT (www.eg.vnao.vn)
return View(movie);
}
ASP.NET khuôn khổ mô hình chất kết dính có giá trị hình thức đăng và tạo một Movie đối tượng đó là
thông qua làbộ phim tham số. ModelState.IsValid kiểm tra trong các mã xác minh rằng các dữ liệu
được gửi dưới hình thức có thể được sử dụng để sửa đổi một đối tượng Movie . Nếu dữ liệu là hợp lệ,
mã lưu dữ liệu phim Phim bộ sưu tập của các MovieDBContext dụ. Các mã sau đó lưu dữ liệu bộ
phim mới vào cơ sở dữ liệu bằng cách gọiSaveChanges phương pháp của MovieDBContext , trong
đó vẫn còn thay đổi vào cơ sở dữ liệu. Sau khi lưu dữ liệu, mã chuyển hướng người dùng Chỉ
số phương pháp hành động của MoviesController lớp, khiến bộ phim được cập nhật sẽ được hiển
thị trong danh sách các bộ phim.
Nếu các giá trị đăng là không hợp lệ, họ được hiển thị lại trong hình
thức. Html.ValidationMessageFor người giúp đỡ trong Edit.cshtml mẫu xem chăm sóc hiển thị các
thông báo lỗi thích hợp.
Lưu ý về địa điểm Nếu bạn thường làm việc với ngôn ngữ khác ngoài tiếng Anh, xem Hỗ trợ
ASP.NET MVC 3 Validation Locales không dung Tiêng Anh.
Phương pháp Edit mạnh mẽ hơn
HttpGet Sửa phương pháp tạo ra bởi hệ thống giàn giáo không kiểm tra rằng các ID được truyền
cho nó là hợp lệ.Nếu người dùng loại bỏ các phân khúc ID từ URL ( http://localhost:xxxxx/Movies/Edit ),
các lỗi sau đây được hiển thị:
49. Edit by Nhiên IT (www.eg.vnao.vn)
Một người sử dụng cũng có thể vượt qua một ID mà không tồn tại trong cơ sở dữ liệu, chẳng hạn
nhưhttp://localhost:xxxxx/Movies/Edit/1234 . Bạn có thể thực hiện hai thay đổi phương pháp hành
động HttpGet Sửa để giải quyết những hạn chế này. Trước tiên, thay đổi ID tham số có một giá trị
mặc định của số không khi một ID không rõ ràng thông qua. Bạn cũng có thể kiểm tra
xem Tìm phương pháp thực sự tìm thấy một bộ phim trước khi trở về đối tượng phim để xem
mẫu. Các cập nhật Sửa phương pháp được hiển thị dưới đây.
public ActionResult Edit(int id = 0)
{
Movie movie = db.Movies.Find(id);
if (movie == null)
{
return HttpNotFound();
}
return View(movie);
}
Nếu bộ phim không được tìm thấy, HttpNotFound phương pháp được gọi.
50. Edit by Nhiên IT (www.eg.vnao.vn)
Tất cả các HttpGet phương pháp theo một mô hình tương tự. Họ có được một đối tượng bộ phim
(hoặc danh sách các đối tượng, trong trường hợp của Index ), và thông qua các mô hình để
xem. Tạo phương pháp vượt qua một đối tượng bộ phim sản phẩm nào để xem Create. Tất cả các
phương pháp tạo, chỉnh sửa, xóa, hoặc nếu không sửa đổi dữ liệu làm như vậy trong HttpPost tình
trạng quá tải của phương pháp này. Sửa đổi dữ liệu trong một HTTP GET phương pháp là một nguy
cơ bảo mật, như mô tả trong blog entry bài Mẹo ASP.NET MVC # 46 - Không sử dụng xóa các liên kết
vì chúng tạo ra lỗ hổng bảo mật . Sửa đổi dữ liệu trong một phương pháp GET cũng vi phạm HTTP
thực hành tốt nhất và REST mô hình kiến trúc, xác định yêu cầu GET không nên thay đổi trạng thái của
các ứng dụng của bạn. Nói cách khác, thực hiện một hoạt động GET phải là một hoạt động an toàn
mà không có tác dụng phụ.
Thêm một phương pháp tìm kiếm và Xem Tìm kiếm
Trong phần này, bạn sẽ thêm một SearchIndex phương pháp hành động cho phép bạn tìm kiếm các
phim theo thể loại hoặc tên. Điều này sẽ có sẵn bằng cách sử dụng / Phim ảnh /
SearchIndex URL. Các yêu cầu sẽ hiển thị một form HTML có chứa các yếu tố đầu vào mà một người
dùng có thể điền vào để tìm kiếm cho một bộ phim. Khi một người dùng gửi các hình thức, phương
pháp hành động sẽ nhận được các giá trị tìm kiếm được đăng bởi người sử dụng và sử dụng các giá
trị để tìm kiếm các cơ sở dữ liệu.
Hiển thị Form SearchIndex
Bắt đầu bằng cách thêm a SearchIndex phương pháp hành động hiện
có MoviesController lớp. Phương pháp này sẽ trả về một xem có chứa một dạng HTML. Dưới đây là
đoạn code:
public ActionResult SearchIndex(string searchString)
{
var movies = from m in db.Movies
select m;
if (!String.IsNullOrEmpty(searchString))
{
movies = movies.Where(s => s.Title.Contains(searchString));
}
return View(movies);
}
Dòng đầu tiên của SearchIndex phương pháp tạo ra LINQ truy vấn sau để lựa chọn các bộ phim:
var movies = from m in db.Movies
select m;
Truy vấn được quy định tại điểm này, nhưng vẫn chưa được chạy với lưu trữ dữ liệu.
Nếu searchString tham số chứa một chuỗi, truy vấn phim được sửa đổi để lọc trên giá trị của chuỗi
tìm kiếm, bằng cách sử dụng đoạn mã sau:
if (!String.IsNullOrEmpty(searchString))
{
51. Edit by Nhiên IT (www.eg.vnao.vn)
movies = movies.Where(s => s.Title.Contains(searchString));
}
Truy vấn LINQ không được thực hiện khi chúng được định nghĩa hoặc khi chúng được sửa đổi bằng
cách gọi một phương thức như ở đâu hoặc OrderBy . Thay vào đó, thực hiện truy vấn là hoãn lại, có
nghĩa là đánh giá của một biểu thức bị trì hoãn cho đến khi nhận ra giá trị của nó là thực sự lặp hơn
hoặc ToList phương pháp được gọi là.Trong SearchIndex mẫu, truy vấn được thực hiện trong xem
SearchIndex. Để biết thêm thông tin về thực hiện truy vấn chậm, thực hiện truy vấn .
Bây giờ bạn có thể thực hiện SearchIndex xem sẽ hiển thị các hình thức cho người sử dụng. Kích
chuột phải vào bên trong SearchIndex phương pháp và sau đó nhấp vào Thêm Xem . Thêm
Xem hộp thoại, chỉ rõ rằng bạn sẽ vượt qua một đối tượng Movie mẫu xem như là mô hình lớp học
của nó. Trong danh sách các mẫu đài , chọnDanh sách , sau đó nhấn Add .
Khi bạn nhấp vào nút Add , Xem Phim SearchIndex.cshtml xem mẫu được tạo ra. Bởi vì bạn
đã chọn Danh sáchtrong mẫu Scaffold danh sách, Visual Web Developer tự động tạo ra (scaffolded)
một số nội dung mặc định trong khung nhìn. Các giàn giáo tạo ra một hình thức HTML. Nó kiểm
tra Movie lớp và tạo ra mã để làm cho các yếu tố<label> cho mỗi thuộc tính của lớp. Danh sách dưới
đây cho thấy quan điểm Create đã được tạo ra:
@model IEnumerable<MvcMovie.Models.Movie>
@{
ViewBag.Title = "SearchIndex";
}
52. Edit by Nhiên IT (www.eg.vnao.vn)
<h2>SearchIndex</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
<th>
Title
</th>
<th>
ReleaseDate
</th>
<th>
Genre
</th>
<th>
Price
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Title)
</td>
<td>
@Html.DisplayFor(modelItem => item.ReleaseDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.Genre)
</td>
<td>
@Html.DisplayFor(modelItem => item.Price)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
@Html.ActionLink("Details", "Details", new { id=item.ID }) |
@Html.ActionLink("Delete", "Delete", new { id=item.ID })
</td>
</tr>
}
</table>
Chạy ứng dụng và điều hướng đến / Phim ảnh / SearchIndex . Nối thêm một chuỗi truy vấn
như searchstring = mavào URL. Các phim đã lọc được hiển thị.
53. Edit by Nhiên IT (www.eg.vnao.vn)
Nếu bạn thay đổi chữ ký của SearchIndex phương pháp để có một tham số có tên là id , id tham số
sẽ phù hợp với {id} giữ chỗ cho các tuyến đường mặc định trong các tập tin Global.asax .
{controller}/{action}/{id}
Các sửa đổi SearchIndex phương pháp này sẽ xem xét như sau:
public ActionResult SearchIndex(string id)
{
string searchString = id;
var movies = from m in db.Movies
select m;
if (!String.IsNullOrEmpty(searchString))
{
movies = movies.Where(s => s.Title.Contains(searchString));
}
return View(movies);
}
54. Edit by Nhiên IT (www.eg.vnao.vn)
public ActionResult SearchIndex(string id)
{
string searchString = id;
var movies = from m in db.Movies
select m;
if (!String.IsNullOrEmpty(searchString))
{
movies = movies.Where(s => s.Title.Contains(searchString));
}
return View(movies);
}
Bây giờ bạn có thể vượt qua các tiêu đề tìm kiếm như là dữ liệu tuyến đường (một phần URL) thay vì
là một giá trị chuỗi truy vấn.
Tuy nhiên, bạn không thể mong đợi người dùng chỉnh sửa URL mỗi khi họ muốn tìm kiếm cho một bộ
phim. Vì vậy, bây giờ bạn sẽ thêm giao diện người dùng để giúp họ lọc phim. Nếu bạn thay đổi chữ ký
55. Edit by Nhiên IT (www.eg.vnao.vn)
của SearchIndexphương pháp để kiểm tra làm thế nào để vượt qua tham số ID-bound đường, thay
đổi nó trở lại để bạnSearchIndex phương pháp có một tham số chuỗi tên là searchString :
public ActionResult SearchIndex(string searchString)
{
var movies = from m in db.Movies
select m;
if (!String.IsNullOrEmpty(searchString))
{
movies = movies.Where(s => s.Title.Contains(searchString));
}
return View(movies);
}
Mở Views Phim SearchIndex.cshtml tập tin, và chỉ sau khi @ Html.ActionLink ("Tạo mới",
"Tạo") , thêm dòng sau:
@using (Html.BeginForm()){
<p> Title: @Html.TextBox("SearchString")
<input type="submit" value="Filter" /></p>
}
Ví dụ sau đây cho thấy một phần Xem Phim SearchIndex.cshtml tập tin với đánh dấu lọc thêm..
@model IEnumerable<MvcMovie.Models.Movie>
@{
ViewBag.Title = "SearchIndex";
}
<h2>SearchIndex</h2>
<p>
@Html.ActionLink("Create New", "Create")
@using (Html.BeginForm()){
<p> Title: @Html.TextBox("SearchString") <br />
<input type="submit" value="Filter" /></p>
}
</p>
Html.BeginForm helper tạo ra một mở <form> tag. Các Html.BeginForm helper gây ra các hình thức
để viết cho chính nó khi người dùng submit form bằng cách nhấn vào Lọc nút.
Chạy ứng dụng và thử tìm kiếm cho một bộ phim.
56. Edit by Nhiên IT (www.eg.vnao.vn)
Không có HttpPost tình trạng quá tải của các SearchIndex phương pháp. Bạn không cần nó, bởi vì
các phương pháp không thay đổi trạng thái của ứng dụng, chỉ cần lọc dữ liệu.
Bạn có thể thêm các phương pháp sau đây HttpPost SearchIndex . Trong trường hợp đó, Invoker
hành động sẽ phù hợp với SearchIndex HttpPost phương pháp, và SearchIndex
HttpPost phương pháp sẽ chạy như thể hiện trong hình dưới đây.
.
[HttpPost]
public string SearchIndex(FormCollection fc, string searchString)
{
return "<h3> From [HttpPost]SearchIndex: " + searchString + "</h3>";
}
57. Edit by Nhiên IT (www.eg.vnao.vn)
Tuy nhiên, ngay cả khi bạn thêm HttpPost phiên bản của SearchIndex phương pháp, có một giới
hạn trong cách này có tất cả được thực hiện. Hãy tưởng tượng rằng bạn muốn đánh dấu một tìm
kiếm cụ thể hoặc bạn muốn gửi một liên kết cho bạn bè mà họ có thể nhấp vào để xem danh sách lọc
của phim. Chú ý rằng các URL cho các yêu cầu HTTP POST là giống như địa chỉ URL cho các yêu cầu
GET (localhost: xxxxx / Phim ảnh / SearchIndex) - không có thông tin tìm kiếm trong URL của chính
nó. Ngay bây giờ, các chuỗi tìm kiếm thông tin được gửi đến máy chủ như là một giá trị trường
mẫu. Điều này có nghĩa là bạn không thể nắm bắt thông tin tìm kiếm để đánh dấu hoặc gửi cho bạn
bè trong một URL.
Giải pháp là sử dụng một tình trạng quá tải của BeginForm xác định yêu cầu POST thêm các thông tin
tìm kiếm vào URL và đó là nên được chuyển đến phiên bản HttpGet của SearchIndex phương
pháp. Thay thế các phương pháphiện có parameterless BeginForm với những điều sau đây:
@using (Html.BeginForm("SearchIndex","Movies",FormMethod.Get))
Bây giờ khi bạn gửi một tìm kiếm, URL có chứa một chuỗi truy vấn tìm kiếm. Tìm kiếm cũng sẽ đi đến
các HttpGet SearchIndex phương pháp hành động, ngay cả khi bạn có một SearchIndex
HttpPost phương pháp.
58. Edit by Nhiên IT (www.eg.vnao.vn)
Thêm Tìm kiếm theo Thể loại
Nếu bạn thêm HttpPost phiên bản của SearchIndex phương pháp, xóa nó ngay bây giờ.
Tiếp theo, bạn sẽ thêm một tính năng cho phép người dùng tìm kiếm phim theo thể loại. Thay
thế SearchIndexphương pháp với mã sau đây:
public ActionResult SearchIndex(string movieGenre, string searchString)
{
var GenreLst = new List<string>();
var GenreQry = from d in db.Movies
orderby d.Genre
select d.Genre;
GenreLst.AddRange(GenreQry.Distinct());
ViewBag.movieGenre = new SelectList(GenreLst);
var movies = from m in db.Movies
select m;
59. Edit by Nhiên IT (www.eg.vnao.vn)
if (!String.IsNullOrEmpty(searchString))
{
movies = movies.Where(s => s.Title.Contains(searchString));
}
if (string.IsNullOrEmpty(movieGenre))
return View(movies);
else
{
return View(movies.Where(x => x.Genre == movieGenre));
}
}
Phiên bản này của các SearchIndex phương pháp có một tham số bổ sung, cụ thể
là movieGenre . Một vài dòng đầu tiên của mã tạo ra một Danh sách đối tượng để tổ chức các thể
loại phim từ cơ sở dữ liệu.
Các mã sau đây là một truy vấn LINQ để lấy tất cả các thể loại từ cơ sở dữ liệu.
var GenreQry = from d in db.Movies
orderby d.Genre
select d.Genre;
Mã này sử dụng AddRange phương pháp chung chung Danh sách bộ sưu tập thêm tất cả các thể loại
riêng biệt vào danh sách. (Nếu không có các biệt sửa đổi, thể loại trùng lặp sẽ được thêm vào - ví dụ,
hài kịch sẽ được thêm hai lần trong mẫu của chúng tôi). Các mã sau đó lưu trữ danh sách các thể loại
trong các đối tượng ViewBag .
Các mã sau đây cho thấy làm thế nào để kiểm tra movieGenre tham số. Nếu đó là không có sản phẩm
nào các mã tiếp tục hạn chế các phim truy vấn để hạn chế những bộ phim được lựa chọn để xác định
thể loại.
if (string.IsNullOrEmpty(movieGenre))
return View(movies);
else
{
return View(movies.Where(x => x.Genre == movieGenre));
}
Thêm Markup Xem SearchIndex Hỗ trợ Tìm kiếm theo Thể loại
Thêm một helper Html.DropDownList Views Phim SearchIndex.cshtml file, chỉ cần trước
khi TextBox helper. Các đánh dấu hoàn thành được hiển thị dưới đây:
<p>
60. Edit by Nhiên IT (www.eg.vnao.vn)
@Html.ActionLink("Create New", "Create")
@using (Html.BeginForm()){
<p>Genre: @Html.DropDownList("movieGenre", "All")
Title: @Html.TextBox("SearchString")
<input type="submit" value="Filter" /></p>
}
</p>
Chạy các ứng dụng và duyệt đến / Phim ảnh / SearchIndex . Hãy thử một tìm kiếm theo thể loại, tên
phim, và cả hai tiêu chí.
Trong phần này, bạn kiểm tra các phương pháp và quan điểm tạo ra bởi khuôn khổ hành động
CRUD. Bạn tạo ra một phương pháp hành động tìm kiếm và xem cho phép người dùng tìm kiếm bằng
tiêu đề phim và thể loại. Trong phần tiếp theo, bạn sẽ xem xét làm thế nào để thêm một tài sản
để Movie mô hình và làm thế nào để thêm một initializer sẽ tự động tạo ra một cơ sở dữ liệu thử
nghiệm.
7. Thêm một lĩnh vực mới để mô hình Movie và
Bảng(C #)
Trong phần này bạn sẽ làm cho một số thay đổi đối với các lớp mô hình và tìm hiểu làm thế nào bạn
có thể cập nhật các lược đồ cơ sở dữ liệu để phù hợp với thay đổi mô hình.
Thêm một Bất Động Sản Rating Model Movie
Bắt đầu bằng cách thêm mới Đánh giá tài sản hiện có Movie lớp. Mở tập tin Movie.cs và thêm Đánh
giá tài sản như thế này:
public string Rating { get; set; }
The Movie hoàn thành lớp học bây giờ trông giống như các mã sau đây:
public class Movie
{
public int ID { get; set; }
public string Title { get; set; }
public DateTime ReleaseDate { get; set; }
public string Genre { get; set; }
public decimal Price { get; set; }
public string Rating { get; set; }
}
Biên dịch lại các ứng dụng bằng cách sử dụng các Gỡ lỗi > Build Movie menu lệnh.
Bây giờ bạn đã cập nhật các mô hình lớp học, bạn cũng cần phải cập nhật Views Phim
Index.cshtml và Views Phim Create.cshtml mẫu xem để hỗ trợ mới Đánh giá tài sản.
61. Edit by Nhiên IT (www.eg.vnao.vn)
Mở Views Phim Index.cshtml tập tin và thêm một Đánh giá <th> </ th> tiêu đề cột ngay sau
khi Giá cột. Sau đó, thêm một <td> cột ở gần cuối của mẫu để vẽ lại các giá trị item.Rating @ . Dưới
đây là cập nhật Index.cshtmlmẫu xem trông giống như:
<table>
<tr>
<th></th>
<th>Title</th>
<th>Release Date</th>
<th>Genre</th>
<th>Price</th>
<th>Rating</th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Title)
</td>
<td>
@Html.DisplayFor(modelItem => item.ReleaseDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.Genre)
</td>
<td>
@Html.DisplayFor(modelItem => item.Price)
</td>
<td>
@Html.DisplayFor(modelItem => item.Rating )
</td>
<td>
@Html.ActionLink("Edit Me", "Edit", new { id=item.ID }) |
@Html.ActionLink("Details", "Details", new { id=item.ID }) |
@Html.ActionLink("Delete", "Delete", new { id=item.ID })
</td>
</tr>
}
</table>
Tiếp theo, mở Views Phim Create.cshtml tập tin và thêm đánh dấu sau đây ở gần cuối của biểu
mẫu. Điều này làm cho một hộp văn bản để bạn có thể chỉ định một đánh giá khi một bộ phim mới
được tạo ra.
<div class="editor-label">
@Html.LabelFor(model => model.Rating)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Rating)
62. Edit by Nhiên IT (www.eg.vnao.vn)
@Html.ValidationMessageFor(model => model.Rating)
</div>
Quản lý Sự khác biệt Schema mô hình và cơ sở dữ liệu
Bây giờ bạn đã cập nhật mã ứng dụng để hỗ trợ mới Đánh giá tài sản.
Bây giờ chạy các ứng dụng và điều hướng đến / Phim URL. Khi bạn làm điều này, tuy nhiên, bạn sẽ
thấy các lỗi sau:
Bạn thấy lỗi này vì cập nhật Movie mô hình lớp học trong ứng dụng bây giờ là khác nhau hơn so với
các lược đồ của Movie bảng của cơ sở dữ liệu hiện có. (Không có Rating cột trong bảng cơ sở dữ
liệu).
Theo mặc định, khi bạn sử dụng Entity Framework Mã để tự động tạo ra một cơ sở dữ liệu, như bạn
đã làm trước đó trong hướng dẫn này, Mã đầu tiên cho biết thêm một bảng cơ sở dữ liệu để giúp
63. Edit by Nhiên IT (www.eg.vnao.vn)
theo dõi xem các lược đồ của cơ sở dữ liệu đồng bộ với các lớp mô hình đó là tạo ra từ. Nếu họ
không đồng bộ, khung Entity ném một lỗi. Điều này làm cho nó dễ dàng hơn để theo dõi các vấn đề
thời gian phát triển mà bạn có thể nếu không chỉ tìm thấy (bởi lỗi tối nghĩa) tại thời gian chạy. Các
tính năng kiểm tra đồng bộ là những gì gây ra các thông báo lỗi sẽ được hiển thị mà bạn chỉ cần nhìn
thấy.
Có hai cách tiếp cận để giải quyết các lỗi:
1. Đã Entity Framework tự động thả và tái tạo cơ sở dữ liệu dựa trên lược đồ lớp mô hình
mới. Phương pháp này là rất thuận tiện khi làm phát triển hoạt động trên một cơ sở dữ liệu thử
nghiệm, bởi vì nó cho phép bạn nhanh chóng phát triển các mô hình và giản đồ cơ sở dữ liệu với
nhau. Nhược điểm, mặc dù, là bạn bị mất dữ liệu hiện có trong cơ sở dữ liệu, do đó
bạn không muốn sử dụng phương pháp này trên một cơ sở dữ liệu sản xuất!
2. Một cách rõ ràng thay đổi lược đồ của cơ sở dữ liệu hiện có để nó phù hợp với các lớp mô
hình. Ưu điểm của phương pháp này là bạn giữ dữ liệu của bạn. Bạn có thể thực hiện thay đổi
hoặc bằng tay hoặc bằng cách tạo ra một kịch bản thay đổi cơ sở dữ liệu.
Đối với hướng dẫn này, chúng tôi sẽ sử dụng các phương pháp tiếp cận đầu tiên - bạn sẽ có Mã Entity
Framework Đầu tiên tự động tái tạo các cơ sở dữ liệu bất cứ lúc nào thay đổi mô hình.
Tự động Re-Tạo cơ sở dữ liệu về thay đổi mô hình
Hãy để cập nhật các ứng dụng để Mã Đầu tiên tự động giảm và tái tạo cơ sở dữ liệu bất cứ lúc nào
bạn thay đổi các mô hình cho các ứng dụng.
Cảnh báo Bạn nên kích hoạt tính năng này cách tiếp cận tự động thả và tái tạo cơ sở dữ liệu chỉ
khi bạn đang sử dụng một phát triển hoặc cơ sở dữ liệu thử nghiệm, và không bao giờ trên một cơ sở
dữ liệu sản xuất có chứa dữ liệu thực tế. Sử dụng nó trên một máy chủ sản xuất có thể dẫn đến mất
dữ liệu.
Trong Solution Explorer , nhấp chuột phải vào Mô hình thư mục, chọn Add , và sau đó
chọn lớp .
Tên lớp "MovieInitializer. Cập nhật MovieInitializer lớp để chứa các mã sau đây:
using System;
64. Edit by Nhiên IT (www.eg.vnao.vn)
using System.Collections.Generic;
using System.Data.Entity;
namespace MvcMovie.Models {
public class MovieInitializer :
DropCreateDatabaseIfModelChanges<MovieDBContext> {
protected override void Seed(MovieDBContext context) {
var movies = new List<Movie> {
new Movie { Title = "When Harry Met Sally",
ReleaseDate=DateTime.Parse("1989-1-11"),
Genre="Romantic Comedy",
Rating="R",
Price=7.99M},
new Movie { Title = "Ghostbusters ",
ReleaseDate=DateTime.Parse("1984-3-13"),
Genre="Comedy",
Rating="R",
Price=8.99M},
new Movie { Title = "Ghostbusters 2",
ReleaseDate=DateTime.Parse("1986-2-23"),
Genre="Comedy",
Rating="R",
Price=9.99M},
new Movie { Title = "Rio Bravo",
ReleaseDate=DateTime.Parse("1959-4-15"),
Genre="Western",
Rating="R",
Price=3.99M},
};
movies.ForEach(d => context.Movies.Add(d));
}
}
}
MovieInitializer lớp xác định rằng cơ sở dữ liệu được sử dụng bởi các mô hình nên được giảm
xuống và tự động tái tạo các lớp mô hình bao giờ thay đổi. Mã số bao gồm một hạt giống phương
pháp để xác định một số dữ liệu mặc định để tự động thêm vào cơ sở dữ liệu bất cứ lúc nào nó được
tạo ra (hoặc tái tạo). Này cung cấp một cách hữu ích để cư trú trong cơ sở dữ liệu với một số dữ liệu
mẫu, mà không đòi hỏi bạn phải tự cư nó mỗi khi bạn thực hiện một thay đổi mô hình.
Bây giờ bạn đã xác định MovieInitializer lớp, bạn sẽ muốn dây nó lên để mỗi lần ứng dụng chạy,
nó sẽ kiểm tra xem các lớp mô hình khác nhau từ các lược đồ trong cơ sở dữ liệu. Nếu có, bạn có thể
chạy các initializer để tái tạo cơ sở dữ liệu để phù hợp với mô hình và sau đó cư trú trong cơ sở dữ
liệu với dữ liệu mẫu.
Mở các tập tin Global.asax đó là ở thư mục gốc của MvcMovies dự án:
65. Edit by Nhiên IT (www.eg.vnao.vn)
Các tập tin Global.asax chứa class định nghĩa toàn bộ ứng dụng cho dự án, và có chứa
một Application_Start xử lý sự kiện chạy khi ứng dụng đầu tiên bắt đầu.
66. Edit by Nhiên IT (www.eg.vnao.vn)
Hãy thêm hai báo cáo sử dụng để đầu của tập tin. Các tài liệu tham khảo đầu tiên Entity Framework
không gian tên, và các tài liệu tham khảo thứ hai không gian tên mà cuộc sống của chúng
tôi MovieInitializer lớp:
using System.Data.Entity; // Database.SetInitialize
using MvcMovie.Models; // MovieInitializer
Sau đó tìm các Application_Start phương pháp và thêm một cuộc gọi
đến Database.SetInitializer ở đầu của phương pháp này, như hình dưới đây:
protected void Application_Start()
{
Database.SetInitializer<MovieDBContext>(new MovieInitializer());
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
Database.SetInitializer báo cáo bạn chỉ cần thêm chỉ ra rằng cơ sở dữ liệu được sử dụng bởi
cácMovieDBContext dụ nên được tự động xóa và tạo lại nếu lược đồ và cơ sở dữ liệu không phù
hợp. Và như bạn đã thấy, nó cũng sẽ cư trú trong cơ sở dữ liệu với dữ liệu mẫu quy định
trong MovieInitializer lớp.
Đóng Global.asax tập tin.
Chạy lại ứng dụng và điều hướng đến / Phim URL. Khi ứng dụng bắt đầu, nó phát hiện cấu trúc mô
hình không còn phù hợp với lược đồ cơ sở dữ liệu. Nó sẽ tự động lại tạo ra cơ sở dữ liệu để phù hợp
với cấu trúc mô hình mới và populates cơ sở dữ liệu với những bộ phim mẫu:
67. Edit by Nhiên IT (www.eg.vnao.vn)
Nhấp vào liên kết Create New để thêm một bộ phim mới. Lưu ý rằng bạn có thể thêm một đánh giá.
68. Edit by Nhiên IT (www.eg.vnao.vn)
Nhấp vào Tạo . Bộ phim mới, bao gồm cả đánh giá, bây giờ xuất hiện trong danh sách phim:
69. Edit by Nhiên IT (www.eg.vnao.vn)
Trong phần này bạn thấy làm thế nào bạn có thể sửa đổi các đối tượng mô hình và giữ cho cơ sở dữ
liệu đồng bộ với những thay đổi. Bạn cũng đã học được một cách để cư một cơ sở dữ liệu mới được
tạo ra với dữ liệu mẫu để bạn có thể thử các kịch bản. Tiếp theo, chúng ta hãy xem làm thế nào bạn
có thể thêm logic xác nhận phong phú hơn các lớp mô hình và cho phép một số quy tắc kinh doanh
được thi hành.
8. Thêm Validation Model(C #)
Trong phần này, bạn sẽ thêm logic xác nhận Movie mô hình, và bạn sẽ đảm bảo rằng các quy tắc xác
nhận được thi hành bất cứ lúc nào người dùng cố gắng để tạo ra hoặc chỉnh sửa một bộ phim bằng
cách sử dụng các ứng dụng.
Giữ Những điều DRY
Một trong những nguyên lý thiết kế cốt lõi của ASP.NET MVC là DRY ("Không lặp lại"). ASP.NET MVC
khuyến khích bạn để xác định chức năng hoặc hành vi chỉ một lần, và sau đó nó đã được phản ánh ở
khắp mọi nơi trong một ứng dụng. Điều này làm giảm số lượng mã bạn cần phải viết và làm cho mã
bạn viết dễ dàng hơn nhiều để duy trì.
Sự hỗ trợ xác nhận cung cấp bởi ASP.NET MVC và Entity Framework Mã Đầu tiên là một ví dụ về
nguyên tắc DRY trong hành động. Bạn có thể khai báo chỉ định các quy tắc xác nhận ở một nơi (trong
lớp mô hình) và sau đó những quy tắc được thi hành ở khắp mọi nơi trong ứng dụng.
Chúng ta hãy xem làm thế nào bạn có thể tận dụng lợi thế này hỗ trợ xác nhận trong các ứng dụng
phim.
Thêm Rules Validation Movie Model
Bạn sẽ bắt đầu bằng cách thêm một số logic xác nhận vào Movie lớp.
70. Edit by Nhiên IT (www.eg.vnao.vn)
Mở Movie.cs tập tin. Thêm một bằng cách sử dụng báo cáo ở phía trên cùng của tập tin mà tài liệu
tham khảokhông gian tên System.ComponentModel.DataAnnotations :
using System.ComponentModel.DataAnnotations;
Không gian tên này là một phần của NET Framework. Nó cung cấp một bộ được xây dựng trong các
thuộc tính xác nhận mà bạn có thể áp dụng khai báo bất kỳ lớp hoặc tài sản.
Bây giờ cập nhật Movie lớp học để tận dụng lợi thế của các built-in , StringLength , và Phạm vi yêu
cầu các thuộc tính xác nhận. Sử dụng mã sau đây là một ví dụ về nơi để áp dụng các thuộc tính.
public class Movie
{
public int ID { get; set; }
[Required(ErrorMessage = "Title is required")]
public string Title { get; set; }
[Required(ErrorMessage = "Date is required")]
public DateTime ReleaseDate { get; set; }
[Required(ErrorMessage = "Genre must be specified")]
public string Genre { get; set; }
[Required(ErrorMessage = "Price Required")]
[Range(1, 100, ErrorMessage = "Price must be between $1 and $100")]
public decimal Price { get; set; }
[StringLength(5)]
public string Rating { get; set; }
}
Các thuộc tính xác nhận chỉ định hành vi mà bạn muốn thực thi trên các thuộc tính mô hình chúng
được áp dụng.Các yêu cầu thuộc tính chỉ ra rằng một tài sản phải có giá trị, trong mẫu này, một bộ
phim có giá trị cho Tiêu đề ,phát hành , Genre , và Giá bất động sản để có giá trị. Phạm vi thuộc
tính hạn chế một giá trị trong một phạm vi quy định. The StringLength thuộc tính cho phép bạn
thiết lập độ dài tối đa của một tài sản chuỗi, và tùy chọn độ dài tối thiểu của nó.
Mã Đầu tiên đảm bảo rằng các quy tắc xác nhận bạn chỉ định trên một lớp mô hình được thi hành
trước khi ứng dụng tiết kiệm những thay đổi trong cơ sở dữ liệu. Ví dụ, đoạn code dưới đây sẽ ném
một ngoại lệ khiSaveChanges được gọi là phương pháp, bởi vì giá trị tài sản một số yêu cầu phim bị
thiếu và giá cả là số không (được ra khỏi phạm vi hợp lệ).
MovieDBContext db = new MovieDBContext();
Movie movie = new Movie();
movie.Title = "Gone with the Wind";
movie.Price = 0.0M;
db.Movies.Add(movie);
db.SaveChanges(); // <= Will throw validation exception
71. Edit by Nhiên IT (www.eg.vnao.vn)
Có quy tắc xác nhận tự động thực thi bởi NET Framework. Giúp làm cho ứng dụng của bạn mạnh mẽ
hơn. Nó cũng đảm bảo rằng bạn không thể quên để xác nhận một cái gì đó và vô tình để cho dữ liệu
xấu vào cơ sở dữ liệu.
Dưới đây là một danh sách mã hoàn chỉnh cho các cập nhật Movie.cs tập tin:
using System;
using System.Data.Entity;
using System.ComponentModel.DataAnnotations;
namespace MvcMovie.Models
{
public class Movie
{
public int ID { get; set; }
[Required(ErrorMessage = "Title is required")]
public string Title { get; set; }
[Required(ErrorMessage = "Date is required")]
public DateTime ReleaseDate { get; set; }
[Required(ErrorMessage = "Genre must be specified")]
public string Genre { get; set; }
[Required(ErrorMessage = "Price Required")]
[Range(1, 100, ErrorMessage = "Price must be between $1 and $100")]
public decimal Price { get; set; }
[StringLength(5)]
public string Rating { get; set; }
}
public class MovieDBContext : DbContext
{
public DbSet<Movie> Movies { get; set; }
}
}
Xác nhận lỗi UI trong ASP.NET MVC
Chạy lại ứng dụng và điều hướng đến / Phim URL.
Nhấp vào liên kết Create Movie để thêm một bộ phim mới. Điền vào biểu mẫu với một số giá trị
không hợp lệ và sau đó nhấp vào Create nút.
72. Edit by Nhiên IT (www.eg.vnao.vn)
Chú ý làm thế nào các hình thức đã tự động được sử dụng một màu nền để làm nổi bật các hộp văn
bản có chứa dữ liệu không hợp lệ và đã phát ra một thông báo xác nhận lỗi thích hợp bên cạnh
mỗi. Các thông báo lỗi phù hợp với các chuỗi lỗi bạn chỉ định khi bạn chú thích Movie lớp. Các lỗi
được thi hành cả khách hàng-side (bằng cách sử dụng JavaScript) và máy chủ phụ (trong trường hợp
người dùng đã vô hiệu hóa JavaScript).
73. Edit by Nhiên IT (www.eg.vnao.vn)
Một lợi ích thực sự mà bạn không cần phải thay đổi một dòng mã trong MoviesController lớp học
hoặc trong các Create.cshtml xem để kích hoạt tính năng này giao diện người dùng xác nhận. Bộ điều
khiển và xem bạn đã tạo ra trước đó trong hướng dẫn này tự động chọn các quy tắc xác nhận mà bạn
chỉ định bằng cách sử dụng các thuộc tính trên các lớp mô hình Movie .
Làm thế nào Validation Xuất hiện ở Xem Tạo và phương pháp hành
động
Bạn có thể tự hỏi làm thế nào được tạo ra mà không có bất kỳ bản cập nhật các mã trong bộ điều
khiển hoặc giao diện người dùng xác nhận. Danh sách tiếp theo cho thấy những gì Tạo phương
pháp MovieController nhìn lớp học như thế. Chúng tôi không thay đổi so với cách bạn tạo ra nó
trước đó trong hướng dẫn này.
//
// GET: /Movies/Create
public ActionResult Create()
{
return View();
}
//
// POST: /Movies/Create
[HttpPost]
public ActionResult Create(Movie movie)
{
if (ModelState.IsValid)
{
db.Movies.Add(movie);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(movie);
}
Phương pháp hành động đầu tiên hiển thị các hình thức Create ban đầu. Thứ hai xử lý các bài
mẫu. Thứ hai Createphương pháp gọi ModelState.IsValid để kiểm tra xem bộ phim có bất kỳ lỗi
nào xác nhận. Gọi phương pháp này đánh giá bất kỳ thuộc tính nào xác nhận đã được áp dụng cho
đối tượng. Nếu đối tượng có lỗi xác nhận, Createphương pháp hiển thị lại các hình thức. Nếu không
có lỗi, phương pháp này tiết kiệm bộ phim mới trong cơ sở dữ liệu.
Dưới đây là các mẫu Create.cshtml cảnh bạn scaffolded trước đó trong hướng dẫn. Nó được sử dụng
bằng các phương pháp hành động được hiển thị trên cả hai để hiển thị các hình thức ban đầu và để
hiện nó trong trường hợp có lỗi.
@model MvcMovie.Models.Movie
@{
ViewBag.Title = "Create";
}
<h2>
75. Edit by Nhiên IT (www.eg.vnao.vn)
<div>
@Html.ActionLink("Back to List", "Index")
</div>
Chú ý cách mã sử dụng một Html.EditorFor helper để sản xuất các <input> phần tử cho
mỗi Movie bất động sản. Bên cạnh helper này là một cuộc gọi
đến Html.ValidationMessageFor phương pháp trợ giúp. Hai phương thức trợ giúp làm việc với các
đối tượng mô hình thông qua bộ điều khiển để xem (trong trường hợp này, một đối
tượng Movie ). Họ tự động cho các thuộc tính xác nhận quy định trên mô hình và thông báo lỗi hiển
thị cho phù hợp.
Gì thực sự tốt đẹp về cách tiếp cận này là không điều khiển cũng không phải là mẫu xem Create biết
bất cứ điều gì về các quy tắc xác nhận thực tế được thi hành hoặc về các thông báo lỗi cụ thể được
hiển thị. Các quy tắc xác nhận và chuỗi lỗi được quy định cụ thể chỉ trong Movie lớp.
Nếu bạn muốn thay đổi logic xác nhận sau đó, bạn có thể làm như vậy trong đúng một nơi. Bạn sẽ
không phải lo lắng về các phần khác nhau của ứng dụng là không phù hợp với các quy tắc được thực
thi như thế nào - tất cả các logic xác nhận sẽ được xác định ở một nơi và được sử dụng ở khắp mọi
nơi. Điều này sẽ giúp mã rất sạch sẽ, và làm cho nó dễ dàng để duy trì và phát triển. Và nó có nghĩa
rằng bạn sẽ được hoàn toàn tôn trọng nguyên tắc DRY.
Thêm định dạng Movie Model
Mở Movie.cs tập tin. Các System.ComponentModel.DataAnnotations namespace cung cấp các
thuộc tính định dạng trong Ngoài ra để các thiết lập được xây dựng trong các thuộc tính xác
nhận. Bạn sẽ áp dụng các thuộc tính và các giá trị liệt kê DataType DisplayFormat ngày phát hành
và các lĩnh vực giá. Các mã sau đây cho thấy phát hành và gia thuộc tính thích
hợp DisplayFormat thuộc tính.
[DataType(DataType.Date)]
public DateTime ReleaseDate { get; set; }
[DataType(DataType.Currency)]
public decimal Price { get; set; }
Ngoài ra, bạn có thể thiết lập một cách rõ ràng một DataFormatString giá trị. Các mã sau đây cho
thấy tài sản ngày phát hành với một chuỗi định dạng ngày (cụ thể là, "d"). Bạn muốn sử dụng để xác
định rằng bạn không muốn thời gian như là một phần của ngày phát hành.
[DisplayFormat(DataFormatString = "{0:d}")]
public DateTime ReleaseDate { get; set; }
Các định dạng mã sau đây gia tài sản như tiền tệ.
[DisplayFormat(DataFormatString = "{0:c}")]
public decimal Price { get; set; }
The Movie hoàn chỉnh lớp được hiển thị dưới đây.
public class Movie
{
public int ID { get; set; }
[Required(ErrorMessage = "Title is required")]
76. Edit by Nhiên IT (www.eg.vnao.vn)
public string Title { get; set; }
[Required(ErrorMessage = "Date is required")]
[DisplayFormat(DataFormatString = "{0:d}")]
public DateTime ReleaseDate { get; set; }
[Required(ErrorMessage = "Genre must be specified")]
public string Genre { get; set; }
[Required(ErrorMessage = "Price Required")]
[Range(1, 100, ErrorMessage = "Price must be between $1 and $100")]
[DisplayFormat(DataFormatString = "{0:c}")]
public decimal Price { get; set; }
[StringLength(5)]
public string Rating { get; set; }
}
Chạy ứng dụng và duyệt để các Phim điều khiển.
77. Edit by Nhiên IT (www.eg.vnao.vn)
Trong phần tiếp theo của loạt bài này, chúng tôi sẽ xem xét các ứng dụng và thực hiện một số cải tiến
để tự động tạo ra chi tiết và Xóa các phương pháp.
9. Cải thiện các chi tiết và Xóa các phương
pháp(C #)
Trong phần này của hướng dẫn, bạn sẽ thực hiện một số cải tiến để tự động tạo ra chi tiết và Xóa
các phương pháp. Những thay đổi này không cần thiết, nhưng chỉ với một vài bit nhỏ của mã, bạn có
thể dễ dàng tăng cường áp dụng.
Cải thiện các chi tiết và Xóa các phương pháp
Khi bạn scaffolded Movie điều khiển, ASP.NET MVC tạo ra mã mà làm việc lớn, nhưng có thể được
thực hiện mạnh mẽ hơn chỉ với một vài thay đổi nhỏ.
Mở Movie điều khiển và thay đổi các chi tiết phương pháp bằng cách trả lại HttpNotFound khi
một bộ phim không tìm thấy. Bạn cũng nên sửa đổi các chi tiết phương pháp để thiết lập một giá
trị mặc định cho các ID được truyền cho nó. (Bạn đã thực hiện thay đổi tương tự như Sửa phương
pháp trong phần 6 của hướng dẫn này). Tuy nhiên, bạn phải thay đổi kiểu trả về của các chi tiết
về phương pháp từ ViewResult để ActionResult , vìHttpNotFound phương pháp không trả về
một ViewResult đối tượng. Ví dụ sau đây cho thấy sửa đổi chi tiết về phương pháp.
public ActionResult Details(int id = 0)
{
Movie movie = db.Movies.Find(id);
if (movie == null)
{
return HttpNotFound();
}
return View(movie);
}
Mã đầu tiên làm cho nó dễ dàng để tìm kiếm dữ liệu bằng cách sử dụng Tìm phương pháp. Một tính
năng bảo mật quan trọng mà chúng tôi xây dựng vào phương pháp là các mã xác minh
rằng Tìm phương pháp đã tìm thấy một bộ phim trước khi mã cố gắng làm bất cứ điều gì với nó. Ví
dụ, một hacker có thể giới thiệu các lỗi vào trang web bằng cách thay đổi URL được tạo ra bởi các liên
kết từ http://localhost:xxxx/Movies/Details/1 một cái gì đó giống
như http://localhost:xxxx/Movies/Details/12345 ( hoặc một số giá trị khác mà không đại diện cho một
bộ phim thực tế). Nếu bạn không kiểm tra cho một bộ phim null, điều này có thể dẫn đến một lỗi cơ
sở dữ liệu.
Tương tự như vậy, thay đổi Xóa và DeleteConfirmed phương pháp để xác định một giá trị mặc định
cho tham số ID và trở về HttpNotFound khi một bộ phim không được tìm thấy. Cập nhật Xóa phương
pháp trong Movie điều khiển được hiển thị dưới đây.
// GET: /Movies/Delete/5
public ActionResult Delete(int id = 0)
{
Movie movie = db.Movies.Find(id);
if (movie == null)
78. Edit by Nhiên IT (www.eg.vnao.vn)
{
return HttpNotFound();
}
return View(movie);
}
//
// POST: /Movies/Delete/5
[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(int id = 0)
{
Movie movie = db.Movies.Find(id);
if (movie == null)
{
return HttpNotFound();
}
db.Movies.Remove(movie);
db.SaveChanges();
return RedirectToAction("Index");
}
Lưu ý rằng Xóa phương pháp không xóa các dữ liệu. Thực hiện một hoạt động xóa để đáp ứng một
yêu cầu GET (hoặc cho rằng vấn đề, thực hiện một sửa hoạt động, hoạt động tạo ra, hoặc hoạt động
nào khác mà thay đổi dữ liệu) mở ra một lỗ hổng bảo mật. Để biết thêm thông tin về điều này, xem
blog entry của Stephen Walther ASP.NET MVC Mẹo # 46 - Không sử dụng xóa các liên kết vì chúng
tạo ra lỗ hổng bảo mật .
Các HttpPost phương pháp xóa dữ liệu được đặt tên là DeleteConfirmed để cung cấp cho các
phương thức HTTP POST một chữ ký duy nhất hoặc tên. Hai phương pháp chữ ký được hiển thị dưới
đây:
// GET: /Movies/Delete/5
public ActionResult Delete(int id = 0)
//
// POST: /Movies/Delete/5
[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(int id = 0)
Thời gian chạy ngôn ngữ chung (CLR) đòi hỏi phải có phương pháp quá tải để có một chữ ký duy nhất
(cùng tên, danh sách các tham số khác nhau). Tuy nhiên, ở đây bạn cần hai phương pháp Xóa - một
cho GET và một cho POST rằng cả hai yêu cầu cùng một chữ ký. (Cả hai đều cần phải chấp nhận một
số nguyên duy nhất như một tham số).
Để sắp xếp này ra, bạn có thể làm một vài điều. Một là để cung cấp cho các phương pháp tên gọi
khác nhau. Đó là những gì chúng tôi đã làm trong ông trước ví dụ. Tuy nhiên, điều này giới thiệu một
vấn đề nhỏ: ASP.NET bản đồ phân đoạn của một URL với các phương pháp hành động của tên, và nếu
bạn đổi tên một phương pháp, định tuyến bình thường sẽ không thể để thấy rằng phương pháp. Giải
pháp là những gì bạn thấy trong ví dụ, mà là để thêm ActionName ("Delete") thuộc
tính DeleteConfirmed phương pháp. Điều này có hiệu quả thực hiện lập bản đồ cho các hệ thống
định tuyến để cho một URL bao gồm / Xóa / cho một yêu cầu POST sẽ tìm thấy nhữngphương
pháp DeleteConfirmed .
79. Edit by Nhiên IT (www.eg.vnao.vn)
Một cách khác để tránh một vấn đề với các phương pháp có tên giống nhau và chữ ký là nhân tạo
thay đổi chữ ký của phương thức POST để bao gồm một tham số không sử dụng. Ví dụ, một số nhà
phát triển thêm một loại tham số FormCollection đó là thông qua phương thức POST, và sau đó chỉ
đơn giản là không sử dụng các tham số:
public ActionResult Delete(FormCollection fcNotUsed, int id = 0)
{
Movie movie = db.Movies.Find(id);
if (movie == null)
{
return HttpNotFound();
}
db.Movies.Remove(movie);
db.SaveChanges();
return RedirectToAction("Index");
}
Tổng kết
Bây giờ bạn có một ASP.NET MVC hoàn thành ứng dụng lưu trữ dữ liệu trong một cơ sở dữ liệu SQL
Server Compact. Bạn có thể tạo, đọc, cập nhật, xóa, và tìm kiếm các phim.