SlideShare a Scribd company logo
1 of 81
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.
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
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.)
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.
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.
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.
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.
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.
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.
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...";
}
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]
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);
}
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
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:
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 :
Edit by Nhiên IT (www.eg.vnao.vn)
Sau đây cho thấy Index.cshtml tập tin đã được tạo ra:
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
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.
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>
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">
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.
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
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.
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ư:
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
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 .
Edit by Nhiên IT (www.eg.vnao.vn)
Tên lớp "Phim".
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 :
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 đỏ.
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.
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.
Edit by Nhiên IT (www.eg.vnao.vn)
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.
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.
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();
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 })
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.
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.
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 .
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).
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.
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.
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]
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)
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>
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>
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");
}
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ị:
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.
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))
{
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";
}
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ị.
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);
}
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ý
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.
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>";
}
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.
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;
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>
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.
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)
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
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;
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:
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.
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:
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á.
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:
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.
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
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.
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).
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>
Edit by Nhiên IT (www.eg.vnao.vn)
Create</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>
<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)
</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>
<div class="editor-label">
@Html.LabelFor(model => model.Rating)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Rating)
@Html.ValidationMessageFor(model => model.Rating)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
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")]
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.
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)
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 .
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.
Asp.net mvc 3 (c#) (9 tutorials)   egroups vn
Asp.net mvc 3 (c#) (9 tutorials)   egroups vn

More Related Content

What's hot

Hướng dẫn thực hành Etabs (cơ bản)
Hướng dẫn thực hành Etabs (cơ bản)Hướng dẫn thực hành Etabs (cơ bản)
Hướng dẫn thực hành Etabs (cơ bản)Hồ Việt Hùng
 
BÀI 3 Làm việc với JAVASCRIPT và JQUERY - Giáo trình FPT
BÀI 3 Làm việc với JAVASCRIPT và JQUERY - Giáo trình FPTBÀI 3 Làm việc với JAVASCRIPT và JQUERY - Giáo trình FPT
BÀI 3 Làm việc với JAVASCRIPT và JQUERY - Giáo trình FPTMasterCode.vn
 
Bài 7: Thư viện jQuery và thư viện jQuery UI - Giáo trình FPT
Bài 7: Thư viện jQuery và thư viện jQuery UI - Giáo trình FPTBài 7: Thư viện jQuery và thư viện jQuery UI - Giáo trình FPT
Bài 7: Thư viện jQuery và thư viện jQuery UI - Giáo trình FPTMasterCode.vn
 
Bai tap thuc hanh javascript
Bai tap thuc hanh javascriptBai tap thuc hanh javascript
Bai tap thuc hanh javascriptnkquank7d
 
Kn đoán lỗi testingvn
Kn đoán lỗi testingvnKn đoán lỗi testingvn
Kn đoán lỗi testingvnNguyễn Việt
 
Những lỗi bảo mật web thường gặp ở phần application
Những lỗi bảo mật web thường gặp ở phần applicationNhững lỗi bảo mật web thường gặp ở phần application
Những lỗi bảo mật web thường gặp ở phần applicationNgoc Dao
 
Thuyet_trinh_de_tai_Joomla
Thuyet_trinh_de_tai_JoomlaThuyet_trinh_de_tai_Joomla
Thuyet_trinh_de_tai_JoomlaTrung Mai
 
Báo cáo tuần 1
Báo cáo tuần 1Báo cáo tuần 1
Báo cáo tuần 1Hien Nguyen
 
Kcs huong dan thuc hanh etabs co ban
Kcs huong dan thuc hanh etabs co banKcs huong dan thuc hanh etabs co ban
Kcs huong dan thuc hanh etabs co banKhuất Thanh
 
Tan cong kieu sql injection tac hai va phong tranh vn
Tan cong kieu sql injection   tac hai va phong tranh vnTan cong kieu sql injection   tac hai va phong tranh vn
Tan cong kieu sql injection tac hai va phong tranh vnJenny Nguyen
 
Visual basic 6 ly thuyet
Visual basic 6 ly thuyetVisual basic 6 ly thuyet
Visual basic 6 ly thuyetphongchitien
 
Chuong 3 windows forms
Chuong 3   windows formsChuong 3   windows forms
Chuong 3 windows formsHarees Seni
 
Hướng dẫn sử dụng Etabs - Cơ bản
Hướng dẫn sử dụng Etabs - Cơ bảnHướng dẫn sử dụng Etabs - Cơ bản
Hướng dẫn sử dụng Etabs - Cơ bảnHồ Việt Hùng
 

What's hot (19)

Hướng dẫn thực hành Etabs (cơ bản)
Hướng dẫn thực hành Etabs (cơ bản)Hướng dẫn thực hành Etabs (cơ bản)
Hướng dẫn thực hành Etabs (cơ bản)
 
BÀI 3 Làm việc với JAVASCRIPT và JQUERY - Giáo trình FPT
BÀI 3 Làm việc với JAVASCRIPT và JQUERY - Giáo trình FPTBÀI 3 Làm việc với JAVASCRIPT và JQUERY - Giáo trình FPT
BÀI 3 Làm việc với JAVASCRIPT và JQUERY - Giáo trình FPT
 
Javascript and dom_html
Javascript and dom_htmlJavascript and dom_html
Javascript and dom_html
 
Bài 7: Thư viện jQuery và thư viện jQuery UI - Giáo trình FPT
Bài 7: Thư viện jQuery và thư viện jQuery UI - Giáo trình FPTBài 7: Thư viện jQuery và thư viện jQuery UI - Giáo trình FPT
Bài 7: Thư viện jQuery và thư viện jQuery UI - Giáo trình FPT
 
Bai tap thuc hanh javascript
Bai tap thuc hanh javascriptBai tap thuc hanh javascript
Bai tap thuc hanh javascript
 
Kn đoán lỗi testingvn
Kn đoán lỗi testingvnKn đoán lỗi testingvn
Kn đoán lỗi testingvn
 
Tim+hieu+jquery
Tim+hieu+jqueryTim+hieu+jquery
Tim+hieu+jquery
 
Ajax Control ToolKit
Ajax Control ToolKitAjax Control ToolKit
Ajax Control ToolKit
 
Lythuyet thi
Lythuyet thiLythuyet thi
Lythuyet thi
 
Những lỗi bảo mật web thường gặp ở phần application
Những lỗi bảo mật web thường gặp ở phần applicationNhững lỗi bảo mật web thường gặp ở phần application
Những lỗi bảo mật web thường gặp ở phần application
 
Thuyet_trinh_de_tai_Joomla
Thuyet_trinh_de_tai_JoomlaThuyet_trinh_de_tai_Joomla
Thuyet_trinh_de_tai_Joomla
 
Bai tap php_m123
Bai tap php_m123Bai tap php_m123
Bai tap php_m123
 
Báo cáo tuần 1
Báo cáo tuần 1Báo cáo tuần 1
Báo cáo tuần 1
 
Kcs huong dan thuc hanh etabs co ban
Kcs huong dan thuc hanh etabs co banKcs huong dan thuc hanh etabs co ban
Kcs huong dan thuc hanh etabs co ban
 
Tan cong kieu sql injection tac hai va phong tranh vn
Tan cong kieu sql injection   tac hai va phong tranh vnTan cong kieu sql injection   tac hai va phong tranh vn
Tan cong kieu sql injection tac hai va phong tranh vn
 
Visual basic 6 ly thuyet
Visual basic 6 ly thuyetVisual basic 6 ly thuyet
Visual basic 6 ly thuyet
 
Aspnet 3.5_03
Aspnet 3.5_03Aspnet 3.5_03
Aspnet 3.5_03
 
Chuong 3 windows forms
Chuong 3   windows formsChuong 3   windows forms
Chuong 3 windows forms
 
Hướng dẫn sử dụng Etabs - Cơ bản
Hướng dẫn sử dụng Etabs - Cơ bảnHướng dẫn sử dụng Etabs - Cơ bản
Hướng dẫn sử dụng Etabs - Cơ bản
 

Similar to Asp.net mvc 3 (c#) (9 tutorials) egroups vn

Asp net mvc3 music store egroups vn
Asp net mvc3 music store   egroups vnAsp net mvc3 music store   egroups vn
Asp net mvc3 music store egroups vnNguyen Van Hung
 
Asp.net mvc framework qua cac vi du
Asp.net mvc framework  qua cac vi duAsp.net mvc framework  qua cac vi du
Asp.net mvc framework qua cac vi duKim Hyun Hai
 
[Athena] Nguyễn Nhật Nguyên - Báo cáo thực tập
[Athena] Nguyễn Nhật Nguyên - Báo cáo thực tập[Athena] Nguyễn Nhật Nguyên - Báo cáo thực tập
[Athena] Nguyễn Nhật Nguyên - Báo cáo thực tậpnnn4194a
 
Lập trình web asp.net MVC
Lập trình web asp.net MVCLập trình web asp.net MVC
Lập trình web asp.net MVCMasterCode.vn
 
Lap trinhcosodulieuvoi c-sharp_phan-1
Lap trinhcosodulieuvoi c-sharp_phan-1Lap trinhcosodulieuvoi c-sharp_phan-1
Lap trinhcosodulieuvoi c-sharp_phan-1Hiển Phùng
 
Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)Minh Tri Lam
 
Book storeonline it-slideshares.blogspot.com
Book storeonline it-slideshares.blogspot.comBook storeonline it-slideshares.blogspot.com
Book storeonline it-slideshares.blogspot.comphanleson
 
Mixing asp.net mvc & web form into hybrid project
Mixing asp.net mvc & web form into hybrid projectMixing asp.net mvc & web form into hybrid project
Mixing asp.net mvc & web form into hybrid projectMinh Tri Lam
 
Bài 1: Làm quen với ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
Bài 1: Làm quen với ASP.NET - Giáo trình FPT - Có ví dụ kèm theoBài 1: Làm quen với ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
Bài 1: Làm quen với ASP.NET - Giáo trình FPT - Có ví dụ kèm theoMasterCode.vn
 
Giao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharpGiao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharpngohanty13
 
01 chuong01tongquanveasp netmvc5
01 chuong01tongquanveasp netmvc501 chuong01tongquanveasp netmvc5
01 chuong01tongquanveasp netmvc5Thanh Nguyen
 
Jdeveloper12c
Jdeveloper12cJdeveloper12c
Jdeveloper12cle larry
 
Bai giangvb.net
Bai giangvb.netBai giangvb.net
Bai giangvb.netvvpcdsptin
 
ASP.NET basic
ASP.NET basicASP.NET basic
ASP.NET basicmeocon21
 

Similar to Asp.net mvc 3 (c#) (9 tutorials) egroups vn (20)

Asp net mvc3 music store egroups vn
Asp net mvc3 music store   egroups vnAsp net mvc3 music store   egroups vn
Asp net mvc3 music store egroups vn
 
Asp.net mvc framework qua cac vi du
Asp.net mvc framework  qua cac vi duAsp.net mvc framework  qua cac vi du
Asp.net mvc framework qua cac vi du
 
[Athena] Nguyễn Nhật Nguyên - Báo cáo thực tập
[Athena] Nguyễn Nhật Nguyên - Báo cáo thực tập[Athena] Nguyễn Nhật Nguyên - Báo cáo thực tập
[Athena] Nguyễn Nhật Nguyên - Báo cáo thực tập
 
Lập trình web asp.net MVC
Lập trình web asp.net MVCLập trình web asp.net MVC
Lập trình web asp.net MVC
 
access
accessaccess
access
 
Lap trinhcosodulieuvoi c-sharp_phan-1
Lap trinhcosodulieuvoi c-sharp_phan-1Lap trinhcosodulieuvoi c-sharp_phan-1
Lap trinhcosodulieuvoi c-sharp_phan-1
 
Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)
 
Mvc 3
Mvc 3Mvc 3
Mvc 3
 
Book storeonline it-slideshares.blogspot.com
Book storeonline it-slideshares.blogspot.comBook storeonline it-slideshares.blogspot.com
Book storeonline it-slideshares.blogspot.com
 
Mixing asp.net mvc & web form into hybrid project
Mixing asp.net mvc & web form into hybrid projectMixing asp.net mvc & web form into hybrid project
Mixing asp.net mvc & web form into hybrid project
 
Bài 1: Làm quen với ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
Bài 1: Làm quen với ASP.NET - Giáo trình FPT - Có ví dụ kèm theoBài 1: Làm quen với ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
Bài 1: Làm quen với ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
 
Asp control
Asp controlAsp control
Asp control
 
Giáo trình asp.net với c sharp
Giáo trình asp.net với c sharpGiáo trình asp.net với c sharp
Giáo trình asp.net với c sharp
 
Aspnet 3.5 -06
Aspnet 3.5 -06Aspnet 3.5 -06
Aspnet 3.5 -06
 
Giao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharpGiao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharp
 
01 chuong01tongquanveasp netmvc5
01 chuong01tongquanveasp netmvc501 chuong01tongquanveasp netmvc5
01 chuong01tongquanveasp netmvc5
 
Jdeveloper12c
Jdeveloper12cJdeveloper12c
Jdeveloper12c
 
Bai giangvb.net
Bai giangvb.netBai giangvb.net
Bai giangvb.net
 
Mô Hình MVC 3.0
Mô Hình MVC 3.0Mô Hình MVC 3.0
Mô Hình MVC 3.0
 
ASP.NET basic
ASP.NET basicASP.NET basic
ASP.NET basic
 

More from Nguyen Van Hung

Cai dat va_cau_hinh_iptables
Cai dat va_cau_hinh_iptablesCai dat va_cau_hinh_iptables
Cai dat va_cau_hinh_iptablesNguyen Van Hung
 
So sánh asp.net và mvc
So sánh asp.net và mvcSo sánh asp.net và mvc
So sánh asp.net và mvcNguyen Van Hung
 
Cong thuc sinh hoc 12 day du nhat
Cong thuc sinh hoc 12 day du nhatCong thuc sinh hoc 12 day du nhat
Cong thuc sinh hoc 12 day du nhatNguyen Van Hung
 
Cong thuc sinh hoc 12 day du nhat
Cong thuc sinh hoc 12 day du nhatCong thuc sinh hoc 12 day du nhat
Cong thuc sinh hoc 12 day du nhatNguyen Van Hung
 
Cau truc dl_va_giai_thuat_bai1[1] - copy
Cau truc dl_va_giai_thuat_bai1[1] - copyCau truc dl_va_giai_thuat_bai1[1] - copy
Cau truc dl_va_giai_thuat_bai1[1] - copyNguyen Van Hung
 
Thạch quyển và các dạng địa hình
Thạch quyển và các dạng địa hìnhThạch quyển và các dạng địa hình
Thạch quyển và các dạng địa hìnhNguyen Van Hung
 
Bài tập về chuẩn hóa chuỗ1
Bài tập về chuẩn hóa chuỗ1Bài tập về chuẩn hóa chuỗ1
Bài tập về chuẩn hóa chuỗ1Nguyen Van Hung
 
Khoahoctunhien.net mang1chieu
Khoahoctunhien.net mang1chieuKhoahoctunhien.net mang1chieu
Khoahoctunhien.net mang1chieuNguyen Van Hung
 
De cuong tu tuong hcm khoa iv
De cuong tu tuong hcm  khoa ivDe cuong tu tuong hcm  khoa iv
De cuong tu tuong hcm khoa ivNguyen Van Hung
 

More from Nguyen Van Hung (17)

Su dung linux shell
Su dung linux shellSu dung linux shell
Su dung linux shell
 
Cai dat va_cau_hinh_iptables
Cai dat va_cau_hinh_iptablesCai dat va_cau_hinh_iptables
Cai dat va_cau_hinh_iptables
 
Git slides
Git slidesGit slides
Git slides
 
390a gitintro 12au
390a gitintro 12au390a gitintro 12au
390a gitintro 12au
 
Introduction to git
Introduction to gitIntroduction to git
Introduction to git
 
So sánh asp.net và mvc
So sánh asp.net và mvcSo sánh asp.net và mvc
So sánh asp.net và mvc
 
Cong thuc sinh hoc 12 day du nhat
Cong thuc sinh hoc 12 day du nhatCong thuc sinh hoc 12 day du nhat
Cong thuc sinh hoc 12 day du nhat
 
Cong thuc sinh hoc 12 day du nhat
Cong thuc sinh hoc 12 day du nhatCong thuc sinh hoc 12 day du nhat
Cong thuc sinh hoc 12 day du nhat
 
Northwind products
Northwind productsNorthwind products
Northwind products
 
Cau truc dl_va_giai_thuat_bai1[1] - copy
Cau truc dl_va_giai_thuat_bai1[1] - copyCau truc dl_va_giai_thuat_bai1[1] - copy
Cau truc dl_va_giai_thuat_bai1[1] - copy
 
Bao cao
Bao caoBao cao
Bao cao
 
Thạch quyển và các dạng địa hình
Thạch quyển và các dạng địa hìnhThạch quyển và các dạng địa hình
Thạch quyển và các dạng địa hình
 
Bài tập về chuẩn hóa chuỗ1
Bài tập về chuẩn hóa chuỗ1Bài tập về chuẩn hóa chuỗ1
Bài tập về chuẩn hóa chuỗ1
 
Khoahoctunhien.net mang1chieu
Khoahoctunhien.net mang1chieuKhoahoctunhien.net mang1chieu
Khoahoctunhien.net mang1chieu
 
Doi xung mang mot chieu
Doi xung mang mot chieuDoi xung mang mot chieu
Doi xung mang mot chieu
 
Gtrinh oop[1]
Gtrinh oop[1]Gtrinh oop[1]
Gtrinh oop[1]
 
De cuong tu tuong hcm khoa iv
De cuong tu tuong hcm  khoa ivDe cuong tu tuong hcm  khoa iv
De cuong tu tuong hcm khoa iv
 

Recently uploaded

Trích dẫn trắc nghiệm tư tưởng HCM5.docx
Trích dẫn trắc nghiệm tư tưởng HCM5.docxTrích dẫn trắc nghiệm tư tưởng HCM5.docx
Trích dẫn trắc nghiệm tư tưởng HCM5.docxnhungdt08102004
 
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptx
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptxChàm - Bệnh án (da liễu - bvdlct ctump) .pptx
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptxendkay31
 
10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...
10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...
10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...Nguyen Thanh Tu Collection
 
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...Nguyen Thanh Tu Collection
 
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh líKiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh líDr K-OGN
 
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...hoangtuansinh1
 
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...Nguyen Thanh Tu Collection
 
Sơ đồ tư duy môn sinh học bậc THPT.pdf
Sơ đồ tư duy môn sinh học bậc THPT.pdfSơ đồ tư duy môn sinh học bậc THPT.pdf
Sơ đồ tư duy môn sinh học bậc THPT.pdftohoanggiabao81
 
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...Nguyen Thanh Tu Collection
 
bài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoa
bài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoabài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoa
bài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoa2353020138
 
NQA Lợi ích Từ ISO và ESG Tăng Trưởng và Bền Vững ver01.pdf
NQA Lợi ích Từ ISO và ESG Tăng Trưởng và Bền Vững ver01.pdfNQA Lợi ích Từ ISO và ESG Tăng Trưởng và Bền Vững ver01.pdf
NQA Lợi ích Từ ISO và ESG Tăng Trưởng và Bền Vững ver01.pdfNguyễn Đăng Quang
 
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...Nguyen Thanh Tu Collection
 
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...Nguyen Thanh Tu Collection
 
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...ThunTrn734461
 
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhhôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhhvanhathvc
 
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfChuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfhoangtuansinh1
 

Recently uploaded (19)

Trích dẫn trắc nghiệm tư tưởng HCM5.docx
Trích dẫn trắc nghiệm tư tưởng HCM5.docxTrích dẫn trắc nghiệm tư tưởng HCM5.docx
Trích dẫn trắc nghiệm tư tưởng HCM5.docx
 
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptx
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptxChàm - Bệnh án (da liễu - bvdlct ctump) .pptx
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptx
 
10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...
10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...
10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...
 
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...
 
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh líKiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
 
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
 
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
 
Sơ đồ tư duy môn sinh học bậc THPT.pdf
Sơ đồ tư duy môn sinh học bậc THPT.pdfSơ đồ tư duy môn sinh học bậc THPT.pdf
Sơ đồ tư duy môn sinh học bậc THPT.pdf
 
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
 
bài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoa
bài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoabài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoa
bài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoa
 
NQA Lợi ích Từ ISO và ESG Tăng Trưởng và Bền Vững ver01.pdf
NQA Lợi ích Từ ISO và ESG Tăng Trưởng và Bền Vững ver01.pdfNQA Lợi ích Từ ISO và ESG Tăng Trưởng và Bền Vững ver01.pdf
NQA Lợi ích Từ ISO và ESG Tăng Trưởng và Bền Vững ver01.pdf
 
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
 
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
 
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
 
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhhôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
 
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfChuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
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 .
  • 27. Edit by Nhiên IT (www.eg.vnao.vn) Tên lớp "Phim".
  • 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.
  • 32. Edit by Nhiên IT (www.eg.vnao.vn)
  • 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>
  • 74. Edit by Nhiên IT (www.eg.vnao.vn) Create</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> <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) </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> <div class="editor-label"> @Html.LabelFor(model => model.Rating) </div> <div class="editor-field"> @Html.EditorFor(model => model.Rating) @Html.ValidationMessageFor(model => model.Rating) </div> <p> <input type="submit" value="Create" /> </p> </fieldset> }
  • 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.