SlideShare a Scribd company logo
1 of 125
Edit by Nhiên IT ( www.eg.vnao.vn )
HƯỚNG DẪN TỪNG BƯỚC TẠO ỨNG
DỤNG WEB SHOP MUSIC STORE BẰNG
ASP .NET MVC3
(Của Microsoft – Edit bởi MHN IT)
1.Tổng quan và File-> New Project
Tổng quan
MVC Music Store là một ứng dụng hướng dẫn, giới thiệu và giải thích bước theo các bước làm thế
nào để sử dụng ASP.NET MVC và Visual Web Developer để phát triển web. Chúng tôi sẽ bắt đầu từ từ,
như vậy mới bắt đầu cấp độ kinh nghiệm phát triển web là okay.
Ứng dụng chúng ta sẽ xây dựng một cửa hàng âm nhạc đơn giản. Có ba phần chính ứng dụng: mua
sắm, thanh toán và quản trị.
Edit by Nhiên IT ( www.eg.vnao.vn )
Du khách có thể duyệt Album theo thể loại:
Họ có thể xem một album duy nhất và thêm nó vào giỏ hàng của họ:
Edit by Nhiên IT ( www.eg.vnao.vn )
Họ có thể xem lại giỏ hàng của họ, loại bỏ bất kỳ mục nào họ không còn muốn:
Căn cứ đến với Checkout sẽ nhắc nhở họ đăng nhập hoặc đăng ký cho một tài khoản người dùng.
Edit by Nhiên IT ( www.eg.vnao.vn )
Sau khi tạo một tài khoản, họ có thể hoàn thành các đơn đặt hàng bằng cách điền vào vận chuyển và
thông tin thanh toán. Để giữ cho mọi thứ đơn giản, chúng tôi đang chạy một quảng bá tuyệt vời: mọi
thứ đều miễn phí nếu họ nhập mã khuyến mãi "miễn phí"!
Edit by Nhiên IT ( www.eg.vnao.vn )
Sau khi đặt hàng, họ nhìn thấy một màn hình xác nhận đơn giản:
Ngoài Trang faceing khách hàng, chúng tôi cũng sẽ xây dựng một phần quản trị cho thấy một danh
sách các album mà từ đó quản trị viên có thể tạo, chỉnh sửa, và xóa các album:
Edit by Nhiên IT ( www.eg.vnao.vn )
1. File -> New Project
Cài đặt phần mềm
Hướng dẫn này sẽ bắt đầu bằng cách tạo ra một mới ASP.NET MVC 3 dự án sử dụng Visual Web
Developer 2010 Express (được miễn phí), và sau đó chúng tôi từng bước sẽ thêm các tính năng để tạo
ra một ứng dụng hoạt động đầy đủ. Trên đường đi, chúng tôi sẽ bao gồm truy cập cơ sở dữ liệu, hình
thành kịch bản gửi bài, xác nhận dữ liệu, bằng cách sử dụng các trang chủ để bố trí trang phù hợp,
bằng cách sử dụng AJAX trang và xác nhận các bản cập nhật, người dùng đăng nhập, và nhiều hơn
nữa.
Bạn có thể theo bước từng bước, hoặc bạn có thể tải về các ứng dụng hoàn thành
từhttp://mvcmusicstore.codeplex.com .
Bạn có thể sử dụng Visual Studio 2010 SP1 hoặc Web Developer Visual 2010 Express SP1 (phiên bản
miễn phí của Visual Studio 2010) để xây dựng các ứng dụng. Chúng tôi sẽ sử dụng SQL Server
Compact (cũng miễn phí) để lưu trữ các cơ sở dữ liệu. Trước khi bạn bắt đầu, hãy chắc chắn rằng bạn
đã cài đặt các điều kiện tiên quyết được liệt kê dưới đây. Bạn có thể cài đặt tất cả chúng bằng cách sử
dụng Web Platform Installer sau
Lưu ý: Bạn có thể tìm thấy liên kết này vào nút màu xanh lá cây lớn tại liên kết này (dễ
nhớ): http://asp.net/mvc
Edit by Nhiên IT ( www.eg.vnao.vn )
Web Platform Installer sẽ kiểm tra những gì bạn đã cài đặt và chỉ cần tải về những gì bạn cần.
Nếu bạn muốn cá nhân cài đặt các điều kiện tiên quyết bằng cách sử dụng các liên kết sau đây thay vì
sử dụng liên kết ở trên, sử dụng các liên kết sau (viết ra trong trường hợp bạn đang sử dụng một
phiên bản in của hướng dẫn này):
 Visual Studio Web Developer Express SP1
 ASP.NET MVC 3 Công cụ Cập
nhật http://www.microsoft.com/web/handlers/webpi.ashx?command=getinstallerredirect&appid
=MVC3
 SQL Server Compact 4,0 - bao gồm cả thời gian chạy và công cụ hỗ trợ
Edit by Nhiên IT ( www.eg.vnao.vn )
Lưu ý: Nếu bạn đang sử dụng Visual Studio 2010 thay vì Visual Web Developer 2010, cài đặt các điều
kiện tiên quyết với liên kết này thay vì:
Visual Studio Web Developer Express SP1
Tôi rất khuyên bạn sử dụng liên kết cài đặt nền tảng web đầu tiên, vì nó sẽ làm cho chắc chắn rằng
bạn đã có tất cả mọi thứ được thiết lập đúng.
Tạo một dự án mới ASP.NET MVC 3
Chúng tôi sẽ bắt đầu bằng cách chọn "New Project" từ menu File trong Visual Web Developer. Điều
này sẽ làm xuất hiện hộp thoại New Project.
Chúng tôi sẽ chọn Visual C # -> Web Templates nhóm bên trái, sau đó chọn "ASP.NET MVC 3 Web
Application" mẫu trong cột trung tâm. Tên MvcMusicStore dự án của bạn và nhấn nút OK.
Điều này sẽ hiển thị một hộp thoại thứ cấp cho phép chúng tôi để làm cho một số cài đặt cụ thể MVC
cho dự án của chúng tôi. Chọn như sau:
Dự án Template - chọn Empty
Xem Engine - Razor chọn
Sử dụng HTML5 ngữ nghĩa đánh dấu kiểm tra
Xác minh rằng các thiết lập của bạn như hình dưới đây, sau đó nhấn nút OK.
Edit by Nhiên IT ( www.eg.vnao.vn )
Điều này sẽ tạo ra dự án của chúng tôi. Chúng ta hãy nhìn vào các thư mục đã được thêm vào ứng
dụng của chúng tôi trong Solution Explorer ở phía bên phải.
Edit by Nhiên IT ( www.eg.vnao.vn )
Các mẫu MVC 3 rỗng không phải là hoàn toàn trống rỗng - nó sẽ thêm một cấu trúc thư mục cơ bản:
ASP.NET MVC làm cho việc sử dụng của một số quy ước đặt tên cơ bản cho tên thư mục:
Thư mục Mục đích
/ Controllers
Bộ điều khiển đáp ứng với đầu vào từ trình duyệt, quyết định phải làm gì
với nó, và trở lại đáp ứng cho người sử dụng.
/ Views Xem giữ các mẫu giao diện người dùng của chúng tôi
Edit by Nhiên IT ( www.eg.vnao.vn )
/ Models Mô hình tổ chức và thao tác dữ liệu
/ Content
Thư mục này nắm giữ hình ảnh của chúng tôi, CSS, và bất kỳ nội dung tĩnh
khác
/ Scripts Thư mục này chứa các tập tin JavaScript của chúng tôi
Các thư mục này bao gồm ngay cả trong một ứng dụng ASP.NET MVC rỗng vì ASP.NET MVC
framework theo mặc định sử dụng một "quy ước về cấu hình" phương pháp tiếp cận và làm cho một
số giả định mặc định dựa trên quy ước đặt tên thư mục. Ví dụ, bộ điều khiển tìm kiếm xem trong thư
mục Views theo mặc định mà không cần phải xác định rõ ràng này trong mã của bạn. Gắn bó với các
công ước mặc định làm giảm số lượng mã bạn cần phải viết, và cũng có thể làm cho nó dễ dàng hơn
cho các nhà phát triển khác để hiểu dự án của bạn. Chúng tôi sẽ giải thích các công ước hơn khi
chúng ta xây dựng ứng dụng của chúng tôi.
Xin vui lòng sử dụng các cuộc thảo luận của http://mvcmusicstore.codeplex.com cho bất kỳ câu hỏi hoặc
nhận xét.
2.Controllers
Với các khuôn khổ web truyền thống, các URL đến thường được ánh xạ tới các tập tin trên đĩa. Ví
dụ: một yêu cầu cho một URL như "products.aspx /" hoặc "Products.php /" có thể được xử lý bởi
một tập tin "products.aspx" hoặc "Products.php".
Khuôn khổ MVC dựa trên web bản đồ các URL để mã máy chủ trong một cách hơi khác
nhau. Thay vì lập bản đồ các URL đến các tập tin, thay vào đó họ bản đồ các URL với các phương
pháp trên lớp. Các lớp này được gọi là "điều khiển" và họ có trách nhiệm để xử lý các yêu cầu
HTTP đến, xử lý đầu vào của người dùng, lấy và lưu dữ liệu, và xác định phản ứng để gửi lại cho
khách hàng (hiển thị HTML, tải về một tập tin, chuyển hướng đến một URL khác nhau, vv).
Thêm một HomeController
Chúng tôi sẽ bắt đầu MVC cửa hàng ứng dụng âm nhạc của chúng tôi bằng cách thêm một lớp
điều khiển sẽ xử lý các URL trang chủ của trang web của chúng tôi. Chúng tôi sẽ thực hiện theo
mặc định quy ước đặt tên của ASP.NET MVC và gọi nó là HomeController.
Kích chuột phải vào "điều khiển" thư mục trong Solution Explorer và chọn "Add", và sau đó là
"điều khiển ..." lệnh:
Edit by Nhiên IT ( www.eg.vnao.vn )
Điều này sẽ mang đến "Thêm điều khiển" hộp thoại. Tên điều khiển "HomeController" và nhấn
nút Add.
Điều này sẽ tạo ra một tập tin mới, HomeController.cs, với mã sau đây:
using System;
Edit by Nhiên IT ( www.eg.vnao.vn )
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MvcMusicStore.Controllers
{
public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
return View();
}
}
}
Để bắt đầu càng đơn giản càng tốt, chúng ta hãy thay thế các phương pháp Index với một phương
pháp đơn giản mà chỉ cần trả về một chuỗi. Chúng tôi sẽ thực hiện hai thay đổi:
 Thay đổi phương thức trả về một chuỗi thay vì một ActionResult
 Thay đổi tuyên bố trở lại để trở về "từ Home"
Phương pháp bây giờ sẽ giống như thế này:
public string Index()
{
return "Hello from Home";
}
Chạy các ứng dụng
Bây giờ hãy chạy các trang web. Chúng tôi có thể bắt đầu máy chủ web của chúng tôi và thử các trang
web bằng cách sử dụng bất kỳ sau đây ::
 Chọn Debug ⇨ Bắt đầu Debugging mục trình đơn
 Click nút mũi tên xanh trên thanh công cụ
 Sử dụng các phím tắt bàn phím, F5.
Sử dụng bất kỳ các bước trên sẽ biên dịch dự án của chúng tôi, và sau đó gây ra sự phát triển ASP.NET
Server đó là được xây dựng vào Visual Web Developer để bắt đầu. Một thông báo sẽ xuất hiện ở góc
dưới cùng của màn hình để chỉ ra rằng phát triển ASP.NET Server đã bắt đầu, và sẽ hiển thị số cổng
mà nó đang chạy theo.
Edit by Nhiên IT ( www.eg.vnao.vn )
Visual Web Developer sau đó sẽ tự động mở một cửa sổ trình duyệt có URL điểm đến máy chủ web
của chúng tôi.Điều này sẽ cho phép chúng tôi nhanh chóng thử các ứng dụng web của chúng tôi:
Được rồi, đó là khá nhanh chóng, chúng tôi tạo ra một trang web mới, bổ sung thêm một chức năng
dòng ba, và chúng tôi đã có văn bản trong một trình duyệt. Không tên lửa khoa học, nhưng đó là một
sự khởi đầu.
Lưu ý: Visual Web Developer bao gồm ASP.NET Phát triển Server, mà sẽ chạy trang web của bạn trên
một ngẫu nhiên số "cổng". Trong hình trên, các trang web đang chạy tại http://localhost:26641/, do đó,
nó sử dụng cổng 26.641. Số cổng của bạn sẽ khác nhau. Khi chúng ta nói về URL như / Store / trong
hướng dẫn này, mà sẽ đi sau khi số cổng. Giả sử một số cổng của 26.641, trình duyệt / Store / Browse sẽ
có nghĩa là duyệt tới http://localhost:26641/Store/Browse.
Thêm một StoreController
Chúng tôi đã thêm một HomeController đơn giản mà thực hiện trang chủ của trang web của chúng
tôi. Bây giờ chúng ta hãy thêm một bộ điều khiển mà chúng ta sẽ sử dụng để thực hiện các chức năng
duyệt web của cửa hàng âm nhạc của chúng tôi. Điều khiển cửa hàng của chúng tôi sẽ hỗ trợ ba kịch
bản:
 Một trang liệt kê các thể loại âm nhạc trong cửa hàng âm nhạc của chúng tôi
 Một trang duyệt liệt kê tất cả các album âm nhạc trong một thể loại cụ thể
 Một trang chi tiết cho thấy thông tin về một album nhạc cụ thể
Chúng tôi sẽ bắt đầu bằng cách thêm một lớp StoreController mới .. Nếu bạn chưa có, ngừng chạy
các ứng dụng, hoặc bằng cách đóng trình duyệt hoặc chọn Debug ⇨ Dừng Debugging mục trình đơn.
Bây giờ thêm một StoreController mới. Cũng giống như chúng tôi đã làm với HomeController, chúng
tôi sẽ làm điều này bằng cách kích chuột phải vào thư mục "điều khiển" trong Solution Explorer và
chọn Add-> mục trình đơn điều khiển
Edit by Nhiên IT ( www.eg.vnao.vn )
StoreController mới của chúng tôi đã có một phương pháp "Index". Chúng tôi sẽ sử dụng phương
pháp "Index" để thực hiện trang danh sách của chúng tôi liệt kê tất cả các thể loại trong cửa hàng âm
nhạc của chúng tôi. Chúng tôi cũng sẽ thêm hai phương pháp bổ sung để thực hiện hai kịch bản khác
mà chúng tôi muốn StoreController của chúng tôi để xử lý: Duyệt và chi tiết.
Những phương pháp này (Index, Duyệt và chi tiết) trong vòng điều khiển của chúng tôi được gọi là
"Hành động điều khiển", và như bạn đã thấy với phương pháp hành động HomeController.Index (),
công việc của họ là để đáp ứng các yêu cầu URL (nói chung) xác định những nội dung cần được gửi
trở lại trình duyệt hoặc người dùng mà gọi URL.
Chúng tôi sẽ bắt đầu thực hiện StoreController của chúng tôi bằng cách thay đổi theIndex () phương
pháp để trả lại chuỗi "Hello từ Store.Index ()" và chúng tôi sẽ thêm các phương pháp tương tự cho
Duyệt () và chi tiết ():
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MvcMusicStore.Controllers
{
public class StoreController : Controller
{
//
// GET: /Store/
public string Index()
{
return "Hello from Store.Index()";
Edit by Nhiên IT ( www.eg.vnao.vn )
}
//
// GET: /Store/Browse
public string Browse()
{
return "Hello from Store.Browse()";
}
//
// GET: /Store/Details
public string Details()
{
return "Hello from Store.Details()";
}
}
}
Khởi động dự án một lần nữa và duyệt các URL sau:
 / Store
 / Store /Browes
 / Store / Details
Truy cập vào các URL sẽ gọi các phương thức hành động trong điều khiển và phản ứng chuỗi trở lại
của chúng tôi:
Đó là tuyệt vời, nhưng đây là những chỉ là chuỗi liên tục. Hãy làm cho họ năng động, vì vậy họ lấy
thông tin từ URL và hiển thị nó trong đầu ra của trang.
Trước tiên, chúng tôi sẽ thay đổi phương thức hành động Browse để lấy một giá trị chuỗi truy vấn từ
URL. Chúng ta có thể làm điều này bằng cách thêm vào một "thể loại" tham số phương pháp hành
động của chúng tôi. Khi chúng ta làm điều này ASP.NET MVC sẽ tự động vượt qua bất kỳ chuỗi truy
vấn hoặc các thông số bài mẫu có tên là "thể loại" phương pháp hành động của chúng tôi khi nó
được gọi.
//
Edit by Nhiên IT ( www.eg.vnao.vn )
// GET: /Store/Browse?genre=Disco
public string Browse(string genre)
{
string message = HttpUtility.HtmlEncode("Store.Browse, Genre = "
+ genre);
return message;
}
Lưu ý: Chúng tôi đang sử dụng các phương pháp hữu ích HttpUtility.HtmlEncode để khử trùng đầu vào
người dùng. Điều này ngăn cản người sử dụng tiêm chích Javascript vào Xem của chúng tôi với một liên
kết như / Store / Duyệt Genre = <script> window.location = 'http://hackersite.com' </ script>.
Bây giờ hãy duyệt đến / Store / Browse?Genre = Disco
Chúng ta hãy tiếp theo thay đổi hành động chi tiết để đọc và hiển thị một tham số đầu vào có tên là
ID. Không giống như các phương pháp trước đó của chúng tôi, chúng tôi sẽ không được nhúng giá trị
ID như một tham số chuỗi truy vấn. Thay vào đó, chúng ta sẽ nhúng nó trực tiếp trong URL của chính
nó. Ví dụ: / Store/Details/5.
ASP.NET MVC cho phép chúng ta dễ dàng làm được điều này mà không cần phải cấu hình bất cứ điều
gì. ASP.NET MVC của quy ước mặc định định tuyến là để điều trị các phân đoạn của một URL sau tên
phương pháp hành động như là một tham số có tên là "ID". Nếu phương pháp hành động của bạn có
một tham số có tên là ID sau đó ASP.NET MVC sẽ tự động thông qua các phân đoạn URL với bạn như
một tham số.
//
// GET: /Store/Details/5
Edit by Nhiên IT ( www.eg.vnao.vn )
public string Details(int id)
{
string message = "Store.Details, ID = " + id;
return message;
}
Chạy ứng dụng và trình duyệt / Store/Details/5:
Hãy tóm tắt lại những gì chúng tôi đã thực hiện cho đến nay:
 Chúng tôi đã tạo ra một ASP.NET MVC dự án mới trong Visual Web Developer
 Chúng tôi đã thảo luận về cấu trúc thư mục cơ bản của một ứng dụng ASP.NET MVC
 Chúng tôi đã học được làm thế nào để chạy trang web của chúng tôi sử dụng máy chủ phát triển
ASP.NET
 Chúng tôi đã tạo ra hai điều khiển lớp học: HomeController và StoreController
 Chúng tôi đã thêm phương pháp hành động để điều khiển của chúng tôi đáp ứng các yêu cầu
URL và trở về văn bản để trình duyệt
3.Views and ViewModels
Vì vậy, đến nay chúng tôi đã chỉ được trở về chuỗi từ hành động điều khiển. Đó là một cách tốt đẹp
để có được một ý tưởng về bộ điều khiển làm việc như thế nào, nhưng nó không phải là làm thế nào
bạn muốn để xây dựng một ứng dụng web thực sự. Chúng tôi sẽ muốn có một cách tốt hơn để tạo ra
HTML cho các trình duyệt truy cập vào trang web của chúng tôi - một trong những nơi mà chúng ta
có thể sử dụng các tập tin mẫu để tùy chỉnh dễ dàng hơn nội dung HTML gửi lại. Đó là chính xác
những gì Lần đọc làm.
Edit by Nhiên IT ( www.eg.vnao.vn )
Thêm một mẫu View
Để sử dụng một cái nhìn mẫu, chúng tôi sẽ thay đổi phương pháp Index HomeController để trả lại
một ActionResult, và nó trở lại View (), như dưới đây:
public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
return View();
}
}
Sự thay đổi trên chỉ ra rằng thay vì trả lại một chuỗi, chúng tôi thay vì muốn sử dụng một "View" để
tạo ra một kết quả trở lại.
Bây giờ chúng ta sẽ thêm một mẫu xem thích hợp cho dự án của chúng tôi. Để làm điều này, chúng
tôi sẽ xác định vị trí con trỏ văn bản trong phương pháp hành động Index, sau đó nhấp chuột phải và
chọn "Add View". Điều này sẽ mang đến hộp thoại Add Xem:
Edit by Nhiên IT ( www.eg.vnao.vn )
"Thêm Xem" hộp thoại cho phép chúng tôi một cách nhanh chóng và dễ dàng tạo ra các tập tin
template Xem.Theo mặc định, "Thêm" hộp thoại trước populates tên của mẫu View để tạo ra để nó
phù hợp với phương pháp hành động mà sẽ sử dụng nó. Bởi vì chúng tôi sử dụng "Add View" menu
ngữ cảnh trong Index () phương pháp hành động của HomeController của chúng tôi, hộp thoại "Add
View" ở trên có "Index" như tên xem được phổ biến trước theo mặc định. Chúng ta không cần thay
đổi bất kỳ các tùy chọn trên hộp thoại này, do đó, nhấp vào nút Add.
Khi nhấn vào nút Add, Visual Web Developer sẽ tạo ra một mẫu Index.cshtml nhìn mới cho chúng tôi
trong thư mục  Xem thư mục , tạo thư mục nếu không tồn tại.
Edit by Nhiên IT ( www.eg.vnao.vn )
Tên và vị trí thư mục của tập tin "Index.cshtml" là quan trọng, và theo mặc định ASP.NET MVC đặt tên
quy ước. Tên thư mục  Views  Home, phù hợp với bộ điều khiển được HomeController đặt tên. Xem
các mẫu tên, Index, phù hợp với phương pháp hành động điều khiển sẽ được hiển thị xem.
ASP.NET MVC cho phép chúng tôi để tránh việc phải xác định rõ ràng tên hoặc vị trí của một mẫu xem
khi chúng ta sử dụng quy ước đặt tên này để trả lại một cái nhìn. Nó theo mặc định sẽ làm  Views 
Trang chủ  Index.cshtml xem mẫu này khi chúng ta viết đoạn mã như sau trong HomeController của
chúng tôi:
public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
return View();
}
}
Visual Web Developer tạo ra và mở "mẫu" Index.cshtml xem sau khi chúng tôi nhấp vào nút "Add"
trong hộp thoại "Add View". Các nội dung của Index.cshtml được hiển thị dưới đây.
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
Điểm này bằng cách sử dụng cú pháp Razor, ngắn gọn hơn so với công cụ Web Forms điểm được sử
dụng trong ASP.NET Web Forms và các phiên bản trước của ASP.NET MVC. Web Forms xem động cơ
Edit by Nhiên IT ( www.eg.vnao.vn )
là vẫn còn có sẵn trong ASP.NET MVC 3, nhưng nhiều nhà phát triển thấy rằng các công cụ xem Razor
phù hợp với phát triển ASP.NET MVC thực sự tốt.
Ba dòng đầu tiên đặt tiêu đề trang bằng cách sử dụng ViewBag.Title. Chúng tôi sẽ xem xét làm thế
nào các công trình này chi tiết hơn ngay sau đó, nhưng trước tiên hãy sửa tiêu đề văn bản văn bản và
xem trang. Cập nhật thẻ <h2> nói "Đây là Trang" như hình dưới đây.
@{
ViewBag.Title = "Index";
}
<h2>This is the Home Page</h2>
Chạy các ứng dụng cho thấy rằng văn bản mới của chúng tôi có thể nhìn thấy trên trang chủ.
Sử dụng một diện cho các yếu tố trang web phổ biến
Hầu hết các trang web có nội dung được chia sẻ giữa nhiều trang: chuyển hướng, cuối trang, hình ảnh
logo, tài liệu tham khảo stylesheet, công cụ xem Razor làm cho điều này dễ dàng quản lý bằng cách
sử dụng một trang _Layout.cshtml gọi là đã tự động được tạo ra cho chúng ta bên trong / Lần đọc /
thư mục Shared.
Edit by Nhiên IT ( www.eg.vnao.vn )
Double-click vào thư mục này để xem nội dung đượ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>
@RenderBody()
</body>
</html>
Các nội dung từ quan điểm cá nhân của chúng tôi sẽ được hiển thị bằng RenderBody @ () lệnh, và bất
kỳ nội dung nào phổ biến mà chúng tôi muốn xuất hiện bên ngoài mà có thể được thêm vào các
đánh dấu _Layout.cshtml.Chúng tôi sẽ muốn MVC Music Store của chúng tôi để có một tiêu đề phổ
biến với các liên kết đến trang chủ của chúng tôi và khu vực Store trên tất cả các trang trong trang
web, vì vậy chúng tôi sẽ thêm rằng mẫu trực tiếp ở trên mà tuyên bố @ RenderBody ().
<!DOCTYPE html>
<html>
<head>
<title>@ViewBag.Title</title>
<link href="@Url.Content("~/Content/Site.css")"
Edit by Nhiên IT ( www.eg.vnao.vn )
rel="stylesheet" type="text/css" />
<script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")"
type="text/javascript"></script>
</head>
<body>
<div id="header">
<h1>
ASP.NET MVC MUSIC STORE</h1>
<ul id="navlist">
<li class="first"><a href="/"
id="current">Home</a></li>
<li><a
href="/Store/">Store</a></li>
</ul>
</div>
@RenderBody()
</body>
</html>
Cập nhật StyleSheet
Các dự án mẫu trống bao gồm một tập tin CSS rất hợp lý mà chỉ cần bao gồm các phong cách được
sử dụng để hiển thị các thông báo xác nhận. Nhà thiết kế của chúng tôi đã cung cấp thêm một số CSS
và hình ảnh để xác định xem và cảm nhận cho trang web của chúng tôi, vì vậy chúng tôi sẽ thêm
những người bây giờ.
CSS cập nhật tập tin và hình ảnh được bao gồm trong thư mục nội dung của Assets.zip-
MvcMusicStore trong đó có sẵn tại http://mvcmusicstore.codeplex.com. Chúng tôi sẽ chọn cả hai
người trong số họ trong Windows Explorer và thả chúng vào thư mục Content Giải pháp của chúng
tôi trong Visual Web Developer, như hình dưới đây:
Bạn sẽ được yêu cầu xác nhận nếu bạn muốn ghi đè lên file Site.css hiện có. Nhấn Yes.
Edit by Nhiên IT ( www.eg.vnao.vn )
Các thư mục nội dung của các ứng dụng của bạn sẽ xuất hiện như sau:
Bây giờ hãy chạy ứng dụng và xem thay đổi của chúng tôi trông như thế nào trên trang chủ.
Edit by Nhiên IT ( www.eg.vnao.vn )
 Ta hãy xem xét những gì đang thay đổi: Chỉ số phương pháp hành động của HomeController tìm
thấy và hiển thị  Views  Trang chủ  Index.cshtmlView mẫu, mặc dù mã của chúng tôi gọi là
"return View ()", bởi vì mẫu của chúng tôi theo các tiêu chuẩn quy ước đặt tên.
 Trang được hiển thị một thông điệp đơn giản chào đón được định nghĩa trong  Views  Home 
mẫu Index.cshtml xem.
 Trang sử dụng mẫu _Layout.cshtml của chúng tôi, và do đó, thông điệp chào mừng được chứa
trong tiêu chuẩn bố trí trang web HTML.
Sử dụng một mô hình truyền thông tin Xem của chúng tôi
Mẫu Xem mà chỉ hiển thị HTML hardcoded không phải là đi để làm cho một trang web rất thú vị. Để
tạo ra một trang web động, chúng tôi thay vì sẽ muốn vượt qua thông tin từ các hành động điều
khiển của chúng tôi vào các mẫu điểm của chúng tôi.
Trong mô hình Model-View-Controller, mô hình là thuật ngữ chỉ các đối tượng đại diện cho dữ liệu
trong ứng dụng. Thông thường, đối tượng mô hình tương ứng với bảng trong cơ sở dữ liệu của bạn,
nhưng họ không có.
Điều khiển phương pháp hành động trả lại một ActionResult có thể vượt qua một đối tượng mô hình
để xem. Điều này cho phép một điều khiển để sạch đóng gói tất cả các thông tin cần thiết để tạo ra
một phản ứng, và sau đó chuyển thông tin này đến một mẫu xem sử dụng để tạo ra các phản ứng
thích hợp HTML. Điều này là dễ nhất để hiểu được bằng cách nhìn thấy nó trong hành động, do đó,
chúng ta hãy bắt đầu.
Đầu tiên chúng ta sẽ tạo ra một số các lớp học mẫu đại diện cho thể loại và album trong cửa hàng
của chúng tôi.Hãy bắt đầu bằng cách tạo ra một lớp Genre. Kích chuột phải vào thư mục "Mô hình"
trong dự án của bạn, chọn tùy chọn "Class Add", và đặt tên cho tập tin "Genre.cs".
Edit by Nhiên IT ( www.eg.vnao.vn )
Sau đó, thêm một tài sản chuỗi Tên công lớp đã được tạo ra:
public class Genre
{
public string Name { get; set; }
}
Lưu ý: Trong trường hợp bạn đang tự hỏi, {get; thiết lập;} ký hiệu được sử dụng các tính năng của C # 's
thuộc tính tự động thực hiện. Điều này mang lại cho chúng ta những lợi ích của một bất động sản mà
không đòi hỏi chúng ta tuyên bố một lĩnh vực sao lưu.
Edit by Nhiên IT ( www.eg.vnao.vn )
Tiếp theo, hãy làm theo các bước tương tự để tạo ra một lớp Album (đặt tên Album.cs) mà có một
Tiêu đề và tài sản Genre:
public class Album
{
public string Title { get; set; }
public Genre Genre { get; set; }
}
Bây giờ chúng ta có thể sửa đổi StoreController sử dụng Xem hiển thị thông tin động từ mô hình của
chúng tôi.Nếu - cho mục đích trình diễn ngay bây giờ - chúng tôi đặt tên Album của chúng tôi dựa
trên ID yêu cầu, chúng tôi có thể hiển thị thông tin đó như trong giao diện dưới đây.
Chúng tôi sẽ bắt đầu bằng cách thay đổi các chi tiết hành động Store do đó, nó cho thấy các thông
tin cho một album duy nhất. Thêm một "sử dụng" tuyên bố để đầu StoreControllers lớp để bao gồm
các không gian tên MvcMusicStore.Models, nên chúng tôi không cần phải gõ
MvcMusicStore.Models.Album mỗi lần chúng tôi muốn sử dụng lớp album. "Usings" của lớp đó sẽ
xuất hiện như dưới đây.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcMusicStore.Models;
Tiếp theo, chúng tôi sẽ cập nhật các hành động điều khiển để nó trả về một ActionResult chứ không
phải là một chuỗi, như chúng ta đã làm với phương pháp Index của HomeController.
Edit by Nhiên IT ( www.eg.vnao.vn )
public ActionResult Details(int id)
Bây giờ chúng ta có thể sửa đổi các logic để trở về một đối tượng Album để xem. Sau đó trong hướng
dẫn này, chúng tôi sẽ được lấy dữ liệu từ một cơ sở dữ liệu - nhưng cho ngay bây giờ, chúng tôi sẽ sử
dụng "dữ liệu giả" để bắt đầu.
public ActionResult Details(int id)
{
var album = new Album { Title = "Album " + id };
return View(album);
}
Lưu ý: Nếu bạn không quen với C #, bạn có thể giả định rằng việc sử dụng các phương tiện var là biến
album của chúng tôi là giới hạn cuối. Đó là không đúng - các C # trình biên dịch sử dụng loại-suy luận
dựa trên những gì chúng ta đang gán cho biến để xác định rằng album Album loại và biên dịch các biến
album địa phương như là một loại Album, vì vậy chúng tôi có được thời gian biên dịch kiểm tra và trực
quan Studio hỗ trợ biên tập mã.
Bây giờ chúng ta hãy tạo ra một mẫu View sử dụng Album của chúng tôi để tạo ra một phản ứng
HTML. Trước khi chúng tôi làm điều đó chúng ta cần phải xây dựng dự án để hộp thoại Add Xem biết
về lớp Album mới được tạo ra của chúng tôi. Bạn có thể xây dựng dự án bằng cách chọn Debug ⇨
Xây dựng MvcMusicStore mục trình đơn (cho thêm tín dụng, bạn có thể sử dụng phím tắt Ctrl-Shift-B
để xây dựng các dự án).
Bây giờ chúng ta đã thiết lập các lớp học của chúng tôi hỗ trợ, chúng tôi đã sẵn sàng để xây dựng
mẫu Xem của chúng tôi. Kích chuột phải vào bên trong phương thức chi tiết và chọn "Thêm Xem ..."
từ menu ngữ cảnh.
Chúng tôi sẽ tạo ra một mẫu Xem mới như chúng tôi đã làm trước đây với HomeController. Vì chúng
ta đang tạo ra nó từ StoreController nó theo mặc định sẽ được tạo ra trong một tập tin  Views  Cửa
hàng  Index.cshtml.
Edit by Nhiên IT ( www.eg.vnao.vn )
Không giống như trước, chúng tôi sẽ kiểm tra "Tạo một mạnh mẽ-gõ" hộp kiểm xem. Chúng tôi sau
đó sẽ lựa chọn của chúng tôi "Album" lớp học trong "Xem dữ liệu đẳng cấp" downlist thả. Điều này sẽ
gây ra "Thêm Xem" hộp thoại để tạo ra một mẫu Xem hy vọng rằng một đối tượng Album sẽ được
thông qua nó để sử dụng.
Khi nhấn vào nút "Add" của chúng tôi  Views  Cửa hàng  Details.cshtml mẫu View sẽ được tạo ra, có
chứa các mã sau đây.
@model MvcMusicStore.Models.Album
@{
ViewBag.Title = "Details";
}
<h2>Details</h2>
Chú ý dòng đầu tiên, mà chỉ ra rằng quan điểm này là mạnh mẽ, gõ vào lớp Album của chúng tôi. Các
công cụ xem Razor hiểu rằng nó đã được thông qua một đối tượng Album, vì vậy chúng ta có thể dễ
dàng truy cập các thuộc tính mô hình và thậm chí có lợi ích của IntelliSense trong trình soạn thảo
Visual Web Developer.
Cập nhật thẻ <h2> do đó, nó sẽ hiển thị thuộc tính chủ đề của album bằng cách thay đổi dòng để
xuất hiện như sau.
<h2>Album: @Model.Title</h2>
Edit by Nhiên IT ( www.eg.vnao.vn )
Chú ý IntelliSense đó được kích hoạt khi bạn nhập vào giai đoạn sau từ khóa mẫu @, hiển thị các
thuộc tính và phương pháp mà lớp Album hỗ trợ.
Bây giờ hãy chạy lại dự án của chúng tôi và truy cập URL / Store/Details/5. Chúng ta sẽ thấy các chi
tiết của một Album như dưới đây.
Bây giờ chúng ta sẽ thực hiện một cập nhật tương tự cho phương pháp Store hành động Browse. Cập
nhật phương pháp để nó trả về một ActionResult và sửa đổi phương pháp logic do đó, nó tạo ra một
đối tượng loại mới và trả về cho View.
public ActionResult Browse(string genre)
{
var genreModel = new Genre { Name = genre };
return View(genreModel);
}
Nhấp chuột phải trong phương pháp Browse và chọn "Thêm View ..." từ menu ngữ cảnh, sau đó thêm
một View mạnh mẽ, đánh máy thêm một đánh máy mạnh mẽ với lớp Genre.
Edit by Nhiên IT ( www.eg.vnao.vn )
Cập nhật các phần tử <h2> trong mã xem (trong / Views / Store / Browse.cshtml) để hiển thị các
thông tin loại.
@model MvcMusicStore.Models.Genre
@{
ViewBag.Title = "Browse";
}
<h2>Browsing Genre: @Model.Name</h2>
Bây giờ hãy chạy lại dự án của chúng tôi và duyệt đến các cửa hàng / / Duyệt Genre = Disco
URL. Chúng ta sẽ thấy trang Browse hiển thị như dưới đây.
Edit by Nhiên IT ( www.eg.vnao.vn )
Cuối cùng, chúng ta hãy làm một bản cập nhật hơi phức tạp hơn để cửa hàng chỉ số phương pháp
hành động và xem để hiển thị một danh sách của tất cả các thể loại trong cửa hàng của chúng
tôi. Chúng tôi sẽ làm điều đó bằng cách sử dụng một danh sách các thể loại như là đối tượng mô hình
của chúng tôi, chứ không phải chỉ một loại duy nhất.
public ActionResult Index()
{
var genres = new List<Genre>
{
new Genre { Name = "Disco"},
new Genre { Name = "Jazz"},
new Genre { Name = "Rock"}
};
return View(genres);
}
Kích chuột phải vào trong phương pháp Index Store hành động và chọn Add View như trước, chọn
loại như các lớp mẫu, và nhấn nút Add.
Edit by Nhiên IT ( www.eg.vnao.vn )
Trước tiên, chúng tôi sẽ thay đổi tuyên bố mô hình @ để chỉ ra rằng quan điểm sẽ được mong đợi đối
tượng Genre nhau thay vì chỉ một. Thay đổi dòng đầu tiên của / Store / Index.cshtml để đọc như sau:
@model IEnumerable<MvcMusicStore.Models.Genre>
Này cho các công cụ xem Razor rằng nó sẽ được làm việc với một đối tượng mô hình có thể giữ các
đối tượng loại một số. Chúng tôi đang sử dụng một <Genre> IEnumerable hơn là <Genre> một danh
sách vì nó chung chung hơn, cho phép chúng ta thay đổi các loại mô hình của chúng tôi sau đó để
bất kỳ loại đối tượng hỗ trợ giao diện IEnumerable.
Tiếp theo, chúng tôi sẽ lặp qua các đối tượng Genre trong mô hình như thể hiện trong mã xem dưới
đây.
@model IEnumerable<MvcMusicStore.Models.Genre>
@{
ViewBag.Title = "Store";
}
<h3>Browse Genres</h3>
<p>
Select from @Model.Count()
genres:</p>
<ul>
@foreach (var genre in Model)
Edit by Nhiên IT ( www.eg.vnao.vn )
{
<li>@genre.Name</li>
}
</ul>
Chú ý rằng chúng tôi có hỗ trợ IntelliSense đầy đủ như chúng ta nhập vào mã này, để khi chúng tôi
gõ "@ Model." Chúng ta thấy tất cả các phương pháp và tài sản được hỗ trợ bởi một IEnumerable
Genre loại.
Trong vòng lặp "foreach", Visual Web Developer biết rằng mỗi mục là kiểu Genre, vì vậy chúng ta thấy
intellisence cho các loại mỗi Genre.
Tiếp theo, các tính năng giàn giáo kiểm tra các đối tượng loại và xác định rằng sẽ có một thuộc tính
Name, do đó, nó vòng qua và viết chúng ra. Nó cũng tạo ra Edit, chi tiết, và Xóa liên kết đến mỗi một
cá nhân. Chúng tôi sẽ tận dụng lợi thế mà sau này trong quản lý cửa hàng của chúng tôi, nhưng bây
giờ chúng tôi muốn có một danh sách đơn giản thay vì.
Khi chúng tôi chạy các ứng dụng và duyệt đến / Store, chúng ta thấy rằng cả hai số và danh sách các
thể loại được hiển thị.
Edit by Nhiên IT ( www.eg.vnao.vn )
Thêm liên kết giữa các trang
URL / Store của chúng tôi liệt kê các thể loại hiện đang liệt kê tên loại đơn giản như là văn bản đơn
giản. Hãy thay đổi này để mà thay vì văn bản đơn giản, chúng tôi thay vì có tên Genre liên kết đến các
cửa hàng / thích hợp / Duyệt URL, vì vậy cách nhấp vào một thể loại âm nhạc như "Disco" sẽ điều
hướng đến các cửa hàng / / Browse? Thể loại = Disco URL. Chúng tôi có thể cập nhật  của chúng tôi
Xem  Cửa hàng  template Xem Index.cshtml để sản xuất những liên kết này bằng cách sử dụng đoạn
mã như sau (không gõ vào trong chúng ta sẽ cải thiện nó) :
<ul>
@foreach (var genre in Model)
{
<li><a href="/Store/Browse?genre=@genre.Name">@genre.Name</a></li>
}
</ul>
Điều đó làm việc, nhưng nó có thể dẫn đến những rắc rối sau này vì nó dựa trên một chuỗi
hardcoded. Ví dụ, nếu chúng ta muốn đổi tên điều khiển, chúng tôi cần phải tìm kiếm thông qua mã
của chúng tôi tìm kiếm các liên kết cần phải được cập nhật.
Một phương pháp khác chúng ta có thể sử dụng là để tận dụng lợi thế của một phương pháp trợ
giúp HTML.ASP.NET MVC bao gồm các phương pháp trợ giúp HTML trong đó có sẵn từ Xem mẫu mã
của chúng tôi để thực hiện một loạt các nhiệm vụ thông thường chỉ như thế này. Html.ActionLink ()
helper là một phương pháp đặc biệt hữu ích, và làm cho nó dễ dàng để xây dựng các liên kết <a>
HTML và chăm sóc những chi tiết gây phiền nhiễu như chắn các đường dẫn URL được mã hóa URL.
Edit by Nhiên IT ( www.eg.vnao.vn )
Html.ActionLink () có quá tải khác nhau để cho phép xác định càng nhiều thông tin như bạn cần cho
liên kết của bạn. Trong trường hợp đơn giản, bạn sẽ cung cấp các văn bản liên kết và phương pháp
hành động để đi đến khi siêu liên kết được nhấp trên máy khách. Ví dụ, chúng ta có thể liên kết đến
"Store / /" phương pháp Index () trên trang Chi tiết Store với các văn bản liên kết "Tới Index Store"
bằng cách sử dụng các cuộc gọi sau đây:
@Html.ActionLink("Go
to the Store Index", "Index")
Lưu ý: Trong trường hợp này, chúng tôi không cần phải xác định tên điều khiển bởi vì chúng tôi chỉ liên
kết đến một hành động khác trong cùng một bộ điều khiển làm cho xem hiện tại.
Liên kết của chúng tôi để trang Browse sẽ cần phải vượt qua một tham số, mặc dù, vì vậy chúng tôi sẽ
sử dụng một tình trạng quá tải của phương pháp Html.ActionLink mất ba thông số:
 1. Liên kết văn bản, mà sẽ hiển thị tên loại
 2. Tên điều khiển hành động (Duyệt)
 3. Route giá trị tham số, xác định cả hai tên (loại) và giá trị (Thể loại tên)
Đưa rằng tất cả cùng nhau, đây là cách chúng tôi sẽ viết các liên kết để xem Index Store:
<ul>
@foreach (var genre in Model)
{
<li>@Html.ActionLink(genre.Name,
"Browse", new { genre = genre.Name })</li>
}
</ul>
Bây giờ khi chúng tôi chạy dự án của chúng tôi một lần nữa và truy cập Store / / URL chúng ta sẽ thấy
một danh sách các thể loại. Từng thể loại là một liên kết khi nhấn vào nó sẽ đưa chúng ta Store / /
Duyệt thể loại = [thể loại]URL.
Edit by Nhiên IT ( www.eg.vnao.vn )
HTML cho danh sách thể loại trông như thế này:
<ul>
<li><a href="/Store/Browse?genre=Disco">Disco</a>
</li>
<li><a href="/Store/Browse?genre=Jazz">Jazz</a>
</li>
<li><a href="/Store/Browse?genre=Rock">Rock</a>
</li>
</ul>
4.Models and Data Access
Cho đến nay, chúng tôi đã chỉ được đi qua "dữ liệu giả" từ bộ điều khiển của chúng tôi vào các mẫu
Xem của chúng tôi. Bây giờ chúng tôi đã sẵn sàng để treo lên một cơ sở dữ liệu thực tế. Trong hướng
dẫn này, chúng tôi sẽ được bao gồm làm thế nào để sử dụng SQL Server Compact Edition (thường gọi
là SQL CE) là công cụ cơ sở dữ liệu của chúng tôi. SQL CE là một, miễn phí, cơ sở dữ liệu, nhúng dựa
trên tập tin mà không yêu cầu bất kỳ cài đặt hoặc cấu hình, mà làm cho nó thực sự thuận tiện cho sự
phát triển của địa phương.
Truy cập cơ sở dữ liệu với Entity Framework Mã-First
Chúng tôi sẽ sử dụng khung Entity (EF) hỗ trợ được bao gồm trong ASP.NET MVC 3 dự án để truy vấn
và cập nhật cơ sở dữ liệu. EF là một đối tượng linh hoạt bản đồ quan hệ (ORM) dữ liệu API cho phép
các nhà phát triển để truy vấn và cập nhật dữ liệu được lưu trữ trong một cơ sở dữ liệu một cách
hướng đối tượng.
Entity Framework phiên bản 4 hỗ trợ một mô hình phát triển gọi là code đầu tiên. Mã đầu tiên cho
phép bạn tạo ra các mô hình đối tượng bằng cách viết các lớp học đơn giản (còn được gọi là POCO từ
"đồng bằng cũ" đối tượng CLR), và thậm chí có thể tạo ra cơ sở dữ liệu trên bay từ các lớp học của
bạn.
Thay đổi các lớp mô hình của chúng tôi
Chúng tôi sẽ tận dụng các tính năng tạo cơ sở dữ liệu trong Entity Framework trong hướng dẫn
này. Trước khi chúng tôi làm điều đó, mặc dù, chúng ta hãy làm một vài thay đổi nhỏ đến các lớp học
mô hình của chúng tôi để thêm vào trong một số những điều chúng ta sẽ được sử dụng sau này.
Thêm các lớp mô hình Artist
Album của chúng tôi sẽ được kết hợp với các nghệ sĩ, vì vậy chúng tôi sẽ thêm một lớp mô hình đơn
giản để mô tả một Artist. Thêm một lớp mới các Artist.cs Mô hình thư mục có tên bằng cách sử dụng
đoạn mã dưới đây.
namespace MvcMusicStore.Models
{
public class Artist
{
public int ArtistId { get; set; }
public string Name { get; set; }
}
}
Edit by Nhiên IT ( www.eg.vnao.vn )
Cập nhật các lớp mô hình của chúng tôi
Cập nhật lớp Album như hình dưới đây.
namespace MvcMusicStore.Models
{
public class Album
{
public int AlbumId { get; set;
}
public int GenreId { get; set; }
public int ArtistId { get; set; }
public string Title { get; set; }
public decimal Price { get; set; }
public string AlbumArtUrl { get; set; }
public Genre Genre { get; set; }
public Artist Artist { get; set; }
}
}
Tiếp theo, làm cho các bản cập nhật sau đến lớp loại.
using System.Collections.Generic;
namespace MvcMusicStore.Models
{
public partial class Genre
{
public int GenreId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public List<Album> Albums { get; set; }
}
}
Thêm thư mục App_Data
Chúng tôi sẽ thêm một thư mục App_Data dự án của chúng tôi tổ chức các tập tin SQL Express Server
cơ sở dữ liệu của chúng tôi. App_Data là một thư mục đặc biệt trong ASP.NET mà đã có các điều
khoản bảo mật truy cập chính xác cho việc truy cập cơ sở dữ liệu. Từ menu Project, chọn Add ASP.NET
Folder, sau đó App_Data.
Edit by Nhiên IT ( www.eg.vnao.vn )
Tạo một chuỗi kết nối trong file web.config
Chúng tôi sẽ thêm một vài dòng vào file cấu hình của trang web để Entity Framework biết làm thế nào
để kết nối với cơ sở dữ liệu của chúng tôi. Double-click vào tập tin Web.config nằm trong thư mục
gốc của dự án.
Di chuyển đến dưới cùng của tập tin này và thêm một phần <connectionStrings> trực tiếp trên dòng
cuối cùng, như hình dưới đây.
Edit by Nhiên IT ( www.eg.vnao.vn )
<connectionStrings>
<add name="MusicStoreEntities"
connectionString="Data Source=|DataDirectory|MvcMusicStore.sdf"
providerName="System.Data.SqlServerCe.4.0"/>
</connectionStrings>
</configuration>
Thêm một Class ngữ cảnh
Kích chuột phải vào thư mục Models và thêm một lớp mới tên là MusicStoreEntities.cs.
Lớp này sẽ đại diện cho các bối cảnh cơ sở dữ liệu Entity Framework, và sẽ xử lý tạo của chúng tôi,
đọc, cập nhật, và xóa các hoạt động cho chúng tôi. Mã cho lớp này được hiển thị dưới đây.
using System.Data.Entity;
namespace MvcMusicStore.Models
{
public class MusicStoreEntities : DbContext
{
public DbSet<Album> Albums { get; set; }
public DbSet<Genre> Genres { get; set; }
}
}
Đó là nó - không có cấu hình khác, giao diện đặc biệt, vv Bằng cách mở rộng các lớp cơ sở DbContext,
lớp MusicStoreEntities của chúng tôi là có thể xử lý các hoạt động cơ sở dữ liệu của chúng tôi cho
chúng tôi. Bây giờ chúng ta đã có mà nối, chúng ta hãy thêm một vài thuộc tính đến các lớp học mô
hình của chúng tôi tận dụng lợi thế của một số thông tin bổ sung trong cơ sở dữ liệu của chúng tôi.
Thêm dữ liệu danh mục cửa hàng của chúng tôi
Chúng tôi sẽ tận dụng lợi thế của một tính năng trong Entity Framework có thêm "hạt giống" dữ liệu
vào một cơ sở dữ liệu mới được tạo ra. Điều này sẽ đặt trước trong danh mục cửa hàng của chúng tôi
với một danh sách các thể loại, nghệ sĩ, và album. Các tải về MvcMusicStore-Assets.zip - trong đó bao
gồm các tập tin thiết kế trang web của chúng tôi sử dụng trước đó trong hướng dẫn này có một tập
tin lớp học với dữ liệu hạt giống này, nằm trong một thư mục tên là Mã.
Edit by Nhiên IT ( www.eg.vnao.vn )
Trong thư mục Mã Models /, xác định vị trí file SampleData.cs và thả nó vào thư mục Mô hình trong
dự án của chúng tôi, như hình dưới đây.
Bây giờ chúng ta cần thêm một dòng mã nói với Entity Framework về điều đó lớp
SampleData. Double-click vào tập tin Global.asax trong thư mục gốc của dự án để mở nó ra và thêm
dòng sau đây trên phương pháp Application_Start.
protected void Application_Start()
{
System.Data.Entity.Database.SetInitializer(
new MvcMusicStore.Models.SampleData());
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
Tại thời điểm này, chúng tôi đã hoàn thành công việc cần thiết để cấu hình Entity Framework cho dự
án của chúng tôi.
Truy vấn cơ sở dữ liệu
Bây giờ chúng ta hãy cập nhật StoreController của chúng tôi để thay vì sử dụng "dữ liệu giả" nó thay
vì các cuộc gọi vào cơ sở dữ liệu của chúng tôi để truy vấn tất cả các thông tin của nó. Chúng tôi sẽ
bắt đầu bằng cách tuyên bố một lĩnh vực trên StoreController giữ một thể hiện của lớp
MusicStoreEntities, tên là storeDB:
public class StoreController : Controller
{
MusicStoreEntities storeDB = new MusicStoreEntities();
Edit by Nhiên IT ( www.eg.vnao.vn )
Cập nhật Index Store để truy vấn cơ sở dữ liệu
Lớp MusicStoreEntities được duy trì bởi khung Entity và đưa ra một tài sản thu cho mỗi bảng trong cơ
sở dữ liệu của chúng tôi. Hãy cập nhật StoreController Index hành động của chúng tôi để lấy tất cả
các thể loại trong cơ sở dữ liệu của chúng tôi. Trước đây, chúng tôi đã làm điều này bởi các chuỗi dữ
liệu cứng mã hóa. Bây giờ chúng ta có thể thay vì chỉ sử dụng Entity Framework ngữ cảnh Generes bộ
sưu tập:
public ActionResult Index()
{
var genres = storeDB.Genres.ToList();
return View(genres);
}
Không có thay đổi cần phải xảy ra mẫu của chúng tôi kể từ khi chúng tôi đang trở về
StoreIndexViewModel cùng chúng tôi trở về trước khi chúng tôi chỉ trả về dữ liệu trực tiếp từ cơ sở dữ
liệu của chúng tôi tại.
Khi chúng tôi điều hành dự án một lần nữa và truy cập vào URL "/ Store", bây giờ chúng ta sẽ thấy
một danh sách của tất cả các thể loại trong cơ sở dữ liệu của chúng tôi:
Cập nhật Browse Store và chi tiết để sử dụng dữ liệu trực tiếp
Với thể loại / Store / Browse = [một số thể loại hành động phương pháp, chúng tôi đang tìm kiếm cho
một loại nhạc theo tên. Chúng tôi chỉ mong đợi một kết quả, kể từ khi chúng tôi nên không bao giờ
có hai mục cho cùng một loại tên, và vì vậy chúng tôi có thể sử dụng phần mở rộng đơn () trong LINQ
để truy vấn cho các đối tượng loại thích hợp như thế này (không gõ này chưa ):
var example = storeDB.Genres.Single(g => g.Name == “Disco”);
Edit by Nhiên IT ( www.eg.vnao.vn )
Phương pháp đơn mất một biểu thức Lambda như một tham số, trong đó quy định cụ thể mà chúng
tôi muốn một đối tượng loại duy nhất như vậy mà tên của nó phù hợp với giá trị mà chúng ta đã xác
định. Trong trường hợp trên, chúng tôi đang tải một đối tượng loại duy nhất với một kết hợp giá trị
Disco Name.
Chúng tôi sẽ tận dụng lợi thế của một tính năng Entity Framework cho phép chúng ta chỉ ra các đơn
vị khác có liên quan, chúng tôi muốn nạp như khi đối tượng loại được lấy ra. Tính năng này được gọi
là kết quả truy vấn Shaping, và cho phép chúng tôi giảm số lần chúng ta cần phải truy cập vào cơ sở
dữ liệu để lấy tất cả các thông tin mà chúng tôi cần. Chúng tôi muốn trước lấy Album Genre chúng tôi
lấy, vì vậy chúng tôi sẽ cập nhật truy vấn của chúng tôi bao gồm từ Genres.Include ("Albums") để chỉ
ra rằng chúng tôi muốn album có liên quan cũng. Đây là hiệu quả hơn, vì nó sẽ lấy cả hai loại của
chúng tôi và Album dữ liệu trong một yêu cầu cơ sở dữ liệu duy nhất.
Với những lời giải thích trên đường đi, đây là cập nhật Browse hành động điều khiển của chúng tôi
trông như thế nào:
public ActionResult Browse(string genre)
{
// Retrieve Genre and its Associated Albums from database
var genreModel = storeDB.Genres.Include("Albums")
.Single(g => g.Name == genre);
return View(genreModel);
}
Bây giờ chúng ta có thể cập nhật Xem Browse Store để hiển thị các album có sẵn trong mỗi loại. Mở
mẫu xem (tìm thấy / Views / Store / Browse.cshtml) và thêm một danh sách liệt kê của Album như
hình dưới đây.
@model MvcMusicStore.Models.Genre
@{
ViewBag.Title = "Browse";
}
<h2>Browsing Genre: @Model.Name</h2>
<ul>
@foreach (var album in Model.Albums)
{
<li>
@album.Title
</li>
}
</ul>
Chạy ứng dụng của chúng tôi và duyệt tới / Store / Duyệt thể loại = chương trình Jazz kết quả của
chúng tôi hiện đang được lấy từ cơ sở dữ liệu, hiển thị tất cả các album trong loại được lựa chọn của
chúng tôi.
Edit by Nhiên IT ( www.eg.vnao.vn )
Chúng tôi sẽ làm cho các thay đổi tương tự Store / / Chi tiết của chúng tôi / [id] URL, và thay thế dữ
liệu giả của chúng tôi với một truy vấn cơ sở dữ liệu mà tải một Album có ID phù hợp với giá trị tham
số.
public ActionResult Details(int id)
{
var album = storeDB.Albums.Find(id);
return View(album);
}
Chạy ứng dụng của chúng tôi và duyệt tới / Store/Details/1 cho thấy kết quả của chúng tôi hiện nay
đang được lấy từ cơ sở dữ liệu.
Edit by Nhiên IT ( www.eg.vnao.vn )
Bây giờ cửa hàng trang Chi tiết của chúng tôi được thiết lập để hiển thị một album ID Album, cho
phép cập nhậtDuyệt xem liên kết để xem chi tiết. Chúng tôi sẽ sử dụng Html.ActionLink, chính xác
như chúng tôi đã liên kết từ Index các cửa hàng để Store Browse ở cuối của phần trước. Nguồn hoàn
chỉnh cho xem Browse xuất hiện bên dưới
@model MvcMusicStore.Models.Genre
@{
ViewBag.Title = "Browse";
}
<h2> Browsing Genre: @Model.Name </ h2>
<ul>
@foreach (var album in Model.Albums)
{
<li>
@Html.ActionLink(album.Title,"Details", new {id = album.AlbumId})
</li>
}
</ ul>
Chúng tôi bây giờ có thể để trình duyệt từ trang cửa hàng của chúng tôi đến một trang Thể loại,
trong đó liệt kê các album có sẵn, và bằng cách nhấp vào một album, chúng ta có thể xem chi tiết cho
album đó.
Edit by Nhiên IT ( www.eg.vnao.vn )
5.Edit Forms and Templating
Trong chương trước, chúng tôi đã được tải dữ liệu từ cơ sở dữ liệu của chúng tôi và hiển thị nó. Trong
chương này, chúng tôi cũng sẽ cho phép chỉnh sửa dữ liệu.
Tạo StoreManagerController
Chúng tôi sẽ bắt đầu bằng cách tạo ra một bộ điều khiển mới được gọi
là StoreManagerController . Cho bộ điều khiển này, chúng ta sẽ được tận dụng giàn giáo các tính
năng có sẵn trong MVC ASP.NET Update Tools 3. Thiết lập các tùy chọn cho hộp thoại Add điều khiển
như hình dưới đây.
Edit by Nhiên IT ( www.eg.vnao.vn )
Khi bạn nhấn chuột vào nút Add, bạn sẽ thấy rằng ASP.NET MVC 3 giàn giáo cơ chế hiện một số
lượng tốt của công việc cho bạn:
 Nó tạo ra StoreManagerController mới với một biến khung Entity địa phương
 Nó cho biết thêm một thư mục StoreManager vào thư mục Views của dự án
 Nó cho biết thêm Create.cshtml, Delete.cshtml, Details.cshtml, Edit.cshtml, và xem Index.cshtml,
mạnh mẽ đánh máy cho lớp Album
Edit by Nhiên IT ( www.eg.vnao.vn )
StoreManager lớp điều khiển mới này bao gồm CRUD (tạo, đọc, cập nhật, xóa) các hành động điều
khiển mà biết làm thế nào để làm việc với các lớp mô hình Album và ngữ cảnh sử dụng Entity
Framework để truy cập cơ sở dữ liệu của chúng tôi.
Sửa đổi một Xem Scaffolded
Điều quan trọng là phải nhớ rằng, trong khi mã này được tạo ra cho chúng ta, nó là tiêu chuẩn mã
ASP.NET MVC, giống như chúng tôi đã viết suốt hướng dẫn này. Nó nhằm mục đích giúp bạn tiết
kiệm thời gian bạn muốn chi tiêu vào việc viết mã điều khiển boilerplate và tạo ra các quan điểm
mạnh mẽ đánh máy bằng tay, nhưng điều này không phải là loại mã được tạo ra, bạn có thể đã thấy
mở đầu với cảnh báo thảm khốc trong ý kiến về việc làm thế nào bạn không được thay đổi mã. Đây là
mã của bạn, và bạn đang dự kiến sẽ thay đổi nó.
Vì vậy, hãy bắt đầu với một chỉnh sửa nhanh chóng để xem Index StoreManager (/ xem /
StoreManager / Index.cshtml). Điểm này sẽ hiển thị một bảng trong đó liệt kê các album khác trong
cửa hàng của chúng tôi với Edit / chi tiết / Xóa liên kết, và bao gồm các tài sản công cộng của
Album. Chúng tôi sẽ loại bỏ các lĩnh vực AlbumArtUrl, vì nó không phải là rất hữu ích trong màn hình
này. Trong phần <table> của mã xem, loại bỏ các yếu tố <th> và <td> xung quanh các tài liệu tham
khảo AlbumArtUrl, như được chỉ ra bởi các đường đánh dấu dưới đây:
Edit by Nhiên IT ( www.eg.vnao.vn )
<table>
<tr>
<th>
Genre
</th>
<th>
Artist
</th>
<th>
Title
</th>
<th>
Price
</th>
<th>
AlbumArtUrl
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Genre.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Artist.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Title)
</td>
<td>
@Html.DisplayFor(modelItem => item.Price)
</td>
<td>
@Html.DisplayFor(modelItem => item.AlbumArtUrl)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.AlbumId }) |
@Html.ActionLink("Details", "Details", new { id=item.AlbumId }) |
@Html.ActionLink("Delete", "Delete", new { id=item.AlbumId })
</td>
</tr>
}
</table>
Mã xem thay đổi sẽ xuất hiện như sau:
@model IEnumerable<MvcMusicStore.Models.Album>
@{
Edit by Nhiên IT ( www.eg.vnao.vn )
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create
New", "Create")
</p>
<table>
<tr>
<th>
Genre
</th>
<th>
Artist
</th>
<th>
Title
</th>
<th>
Price
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Genre.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Artist.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Title)
</td>
<td>
@Html.DisplayFor(modelItem => item.Price)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.AlbumId }) |
@Html.ActionLink("Details", "Details", new { id=item.AlbumId }) |
@Html.ActionLink("Delete", "Delete", new { id=item.AlbumId })
</td>
</tr>
}
</table>
Một cái nhìn đầu tiên tại Store Manager
Bây giờ chạy các ứng dụng và trình duyệt / StoreManager /. Này hiển thị Index Store Manager, chúng
tôi chỉ cần sửa đổi, hiển thị một danh sách các album khác trong cửa hàng với các liên kết Chỉnh sửa,
chi tiết, và Delete.
Edit by Nhiên IT ( www.eg.vnao.vn )
Nhấp vào liên kết Chỉnh sửa hiển thị một hình thức chỉnh sửa với các lĩnh vực Album, bao gồm
Dropdowns cho loại và Artist.
Edit by Nhiên IT ( www.eg.vnao.vn )
Nhấp vào "Back to List" liên kết ở phía dưới, sau đó bấm vào liên kết Details Album. Hiển thị thông tin
chi tiết cho một Album cá nhân.
Một lần nữa, bấm vào Trở lại danh sách liên kết, và sau đó nhấn vào một liên kết Xoá. Này sẽ hiển thị
một hộp thoại xác nhận, hiển thị các chi tiết album và hỏi nếu chúng tôi chắc chắn chúng tôi muốn
xóa nó.
Edit by Nhiên IT ( www.eg.vnao.vn )
Nhấp vào nút Delete ở phía dưới sẽ xóa các album và đưa bạn trở lại trang Index, trong đó cho thấy
trong album đã bị xóa.
Chúng tôi không thực hiện với Store Manager, nhưng chúng tôi đã làm việc điều khiển và xem mã cho
các hoạt động CRUD để bắt đầu từ.
Nhìn vào mã Store điều khiển quản lý
Controller Store Manager có chứa một số lượng tốt của các mã. Hãy cho đi qua này từ trên xuống
dưới. Bộ điều khiển bao gồm một số tên miền không gian tiêu chuẩn cho một bộ điều khiển MVC,
cũng như một tham chiếu đến không gian tên Mô hình của chúng tôi. Bộ điều khiển có một trường
hợp riêng của MusicStoreEntities, được sử dụng bởi các hành động điều khiển để truy cập dữ liệu.
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcMusicStore.Models;
namespace MvcMusicStore.Controllers
{
public class StoreManagerController : Controller
{
private MusicStoreEntities db = new MusicStoreEntities();
Store Manager Index và chi tiết hành động
Edit by Nhiên IT ( www.eg.vnao.vn )
Xem chỉ số lấy một danh sách các Album, bao gồm cả loại tham chiếu mỗi album và thông tin Artist,
như chúng ta đã thấy trước đó khi làm việc trên phương pháp Browse Store. Xem Index theo các tài
liệu tham khảo cho các đối tượng liên kết để nó có thể hiển thị tên Genre mỗi album và tên nghệ sĩ,
do đó, bộ điều khiển hiệu quả và truy vấn thông tin này trong yêu cầu ban đầu.
//
// GET: /StoreManager/
public ViewResult Index()
{
var albums = db.Albums.Include(a => a.Genre).Include(a => a.Artist);
return View(albums.ToList());
}
Chi tiết hành động điều khiển Controller StoreManager hoạt động chính xác tương tự như hành động
Store chi tiết điều khiển chúng tôi đã viết trước đây - nó truy vấn Album theo ID bằng cách sử dụng
phương thức Find (), sau đó trả lại nó cho xem.
//
// GET: /StoreManager/Details/5
public ViewResult Details(int id)
{
Album album = db.Albums.Find(id);
return View(album);
}
Hành động tạo ra phương pháp
Tạo phương pháp hành động là một chút khác nhau từ những người chúng ta đã thấy cho đến nay, vì
họ xử lý các hình thức đầu vào. Khi một người sử dụng đầu tiên thăm / StoreManager / Tạo / họ sẽ
được hiển thị một hình thức trống rỗng. Trang HTML này sẽ chứa một yếu tố <form> có chứa các yếu
tố đầu vào và các hộp thả xuống nơi họ có thể nhập các chi tiết của album.
Sau khi người dùng điền vào các giá trị hình thức Album, họ có thể nhấn nút "Save" để gửi những
thay đổi trở lại ứng dụng của chúng tôi để tiết kiệm trong cơ sở dữ liệu. Khi người dùng nhấn nút
"lưu" <form> sẽ thực hiện một HTTP POST lại này để các StoreManager / / Tạo / URL và gửi các giá trị
<form> như là một phần của POST-HTTP.
ASP.NET MVC cho phép chúng ta dễ dàng chia logic của hai kịch bản này gọi URL bằng cách cho
phép chúng tôi thực hiện hai riêng biệt "Tạo" phương pháp hành động trong lớp
StoreManagerController của chúng tôi - một để xử lý ban đầu HTTP-GET duyệt này để các
StoreManager / / Tạo / URL, và các khác để xử lý các HTTP POST trong những thay đổi trình.
Chuyển thông tin ViewBag Xem bằng cách sử dụng
Chúng tôi đã sử dụng ViewBag trước đó trong hướng dẫn này, nhưng đã không nói nhiều về
nó. ViewBag cho phép chúng ta chuyển thông tin để xem mà không cần sử dụng một mô hình đối
tượng mạnh mẽ đánh máy. Trong trường hợp này, chúng tôi Sửa HTTP-GET điều khiển hành động cần
phải vượt qua cả một danh sách các thể loại và nghệ sĩ để hình thành để cư Dropdowns, và cách đơn
giản nhất để làm điều đó là để trả lại như các mục ViewBag.
ViewBag là một đối tượng năng động, có nghĩa là bạn có thể gõ ViewBag.Foo hoặc
ViewBag.YourNameHere mà không cần viết mã để xác định những tài sản. Trong trường hợp này, mã
điều khiển sử dụng ViewBag.GenreId và ViewBag.ArtistId để thả xuống các giá trị nộp cùng với mẫu
đơn sẽ được GenreId và ArtistId, là tài sản Album họ sẽ được thiết lập.
Những giá trị này thả xuống trở lại dưới hình thức bằng cách sử dụng các đối tượng SelectList, được
xây dựng cho mục đích đó. Điều này được thực hiện bằng cách sử dụng mã như thế này:
Edit by Nhiên IT ( www.eg.vnao.vn )
ViewBag.GenreId = new SelectList(db.Genres, "GenreId",
"Name");
Như bạn có thể nhìn thấy từ mã phương pháp hành động, ba thông số đang được sử dụng để tạo ra
các đối tượng này:
 Danh sách các hạng mục trình đơn thả xuống sẽ được hiển thị. Lưu ý rằng đây không phải chỉ là
một chuỗi - chúng ta sẽ đi qua một danh sách các thể loại.
 Tham số tiếp theo được thông qua SelectList các giá trị được chọn. Này. SelectList biết làm thế
nào trước chọn một mục trong danh sách Điều này sẽ dễ dàng hơn để hiểu khi chúng ta nhìn
vào các hình thức Edit, là khá tương tự.
 Tham số cuối cùng là các tài sản sẽ được hiển thị. Trong trường hợp này, điều này được chỉ ra
rằng tài sản Genre.Name là những gì sẽ được hiển thị cho người dùng.
Với ý nghĩ đó, sau đó, HTTP-GET Tạo hành động là khá đơn giản - SelectLists hai được thêm vào các
ViewBag, và không có mô hình đối tượng được thông qua hình thức (vì nó đã không được tạo ra
chưa).
//
// GET: /StoreManager/Create
public ActionResult Create()
{
ViewBag.GenreId = new SelectList(db.Genres, "GenreId",
"Name");
ViewBag.ArtistId = new SelectList(db.Artists, "ArtistId",
"Name");
return View();
}
Helpers HTML để hiển thị các Downs Drop Xem Create
Kể từ khi chúng tôi đã nói chuyện về cách thả xuống giá trị được thông qua để xem, chúng ta hãy xem
nhanh xem để xem làm thế nào những giá trị được hiển thị. Trong đoạn code xem (/ xem /
StoreManager / Create.cshtml), bạn sẽ thấy cuộc gọi sau đây được thực hiện để hiển thị các loại thả
xuống.
Html.DropDownList ("GenreId",
String.Empty)
Điều này được biết đến như một HTML Helper - một phương pháp hữu ích, thực hiện một nhiệm vụ
chung. Helpers HTML rất hữu ích trong việc giữ mã điểm của chúng tôi ngắn gọn và dễ đọc. Helper
Html.DropDownList được cung cấp bởi ASP.NET MVC, nhưng như chúng ta sẽ thấy sau đó nó có thể
tạo ra người giúp việc riêng của mình cho mã xem chúng tôi sẽ tái sử dụng trong ứng dụng của
chúng tôi.
Các cuộc gọi Html.DropDownList chỉ cần được nói với hai điều - nơi để có được danh sách để hiển thị,
và những gì giá trị (nếu có) nên được chọn sẵn. Tham số đầu tiên, GenreId, cho DropDownList để tìm
kiếm một giá trị có tên GenreId trong mô hình hoặc ViewBag. Tham số thứ hai được sử dụng để chỉ ra
giá trị để hiển thị như ban đầu được lựa chọn trong danh sách thả xuống. Vì biểu mẫu này là một hình
thức Create, không có giá trị được chọn trước và String.Empty được thông qua.
Xử lý các giá trị mẫu văn
Như chúng ta đã thảo luận trước đó, có hai phương pháp hành động kết hợp với mỗi hình thức. Đầu
tiên xử lý các yêu cầu HTTP GET và hiển thị biểu mẫu. Thứ hai xử lý các yêu cầu HTTP POST, trong đó
có chứa các giá trị biểu mẫu được gửi. Chú ý rằng điều khiển hành động có một HttpPost] thuộc tính,
mà nói với ASP.NET MVC là nó chỉ cần đáp ứng các yêu cầu HTTP-POST.
Edit by Nhiên IT ( www.eg.vnao.vn )
//
// POST: /StoreManager/Create
[HttpPost]
public ActionResult Create(Album album)
{
if (ModelState.IsValid)
{
db.Albums.Add(album);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.GenreId = new SelectList(db.Genres, "GenreId",
"Name", album.GenreId);
ViewBag.ArtistId = new SelectList(db.Artists, "ArtistId",
"Name", album.ArtistId);
return View(album);
}
Hành động này có bốn trách nhiệm:
 1. Đọc giá trị hình thức
 2. Kiểm tra xem các giá trị hình thức vượt qua bất kỳ quy tắc xác nhận
 3. Nếu hình thức trình là hợp lệ, lưu dữ liệu và hiển thị danh sách cập nhật
 4. Nếu hình thức trình không hợp lệ, hiển thị lại các hình thức với các lỗi xác nhận
Đọc giá trị hình thức với Binding mẫu
Hành động điều khiển được xử lý một hình thức trình bao gồm giá trị cho GenreId và ArtistId (từ danh
sách thả xuống) và các giá trị hộp văn bản Title, Giá, và AlbumArtUrl. Trong khi nó có thể truy cập trực
tiếp các giá trị hình thức, một cách tiếp cận tốt hơn là sử dụng khả năng mô hình Binding được xây
dựng vào ASP.NET MVC. Khi một hành động điều khiển một loại mô hình như một tham số, ASP.NET
MVC sẽ cố gắng để cư trú một đối tượng của kiểu bằng cách sử dụng các yếu tố đầu vào hình thức
(cũng như các tuyến đường và chuỗi truy vấn giá trị). Nó làm điều này bằng cách tìm kiếm các giá trị
có tên phù hợp với tính chất của đối tượng mô hình, ví dụ như khi thiết lập giá trị GenreId đối tượng
Album mới, có vẻ một đầu vào với GenreId tên. Khi bạn tạo ra quan điểm bằng cách sử dụng các
phương pháp tiêu chuẩn trong ASP.NET MVC, các hình thức sẽ luôn luôn được trả lại bằng cách sử
dụng tên tài sản như tên trường đầu vào, do đó, các tên trường sẽ chỉ phù hợp.
Validating Model
Mô hình này được xác nhận với một cuộc gọi đơn giản để ModelState.IsValid. Chúng tôi đã không
được thêm bất kỳ quy tắc xác nhận vào lớp Album của chúng tôi - chúng tôi sẽ làm một chút - vì vậy
ngay bây giờ việc kiểm tra này không có nhiều việc để làm. Điều quan trọng là việc kiểm tra này
ModelStat.IsValid sẽ thích ứng với các quy tắc xác nhận chúng tôi đưa vào mô hình của chúng tôi, do
đó, những thay đổi trong tương lai để quy tắc xác nhận sẽ không yêu cầu bất kỳ bản cập nhật mã
hành động điều khiển.
Tiết kiệm các giá trị submit
Nếu hình thức trình đi xác nhận, đó là thời gian để lưu các giá trị cơ sở dữ liệu. Với Entity Framework,
mà chỉ cần yêu cầu thêm các mô hình để thu Albums và gọi SaveChanges.
db.Albums.Add(album);
db.SaveChanges();
Entity Framework tạo ra các câu lệnh SQL thích hợp để vẫn tồn các giá trị. Sau khi lưu các dữ liệu,
chúng tôi chuyển hướng trở lại danh sách các album, do đó chúng ta có thể thấy cập nhật của chúng
Edit by Nhiên IT ( www.eg.vnao.vn )
tôi. Điều này được thực hiện bằng cách trở về RedirectToAction với tên của hành động điều khiển
chúng ta muốn hiển thị. Trong trường hợp này, đó là phương pháp Index.
Hiển thị đệ trình không hợp lệ với các lỗi Validation
Trong trường hợp đầu vào không hợp lệ, các giá trị thả xuống được thêm vào các ViewBag (như trong
trường hợp HTTP-GET) và mô hình các giá trị ràng buộc được thông qua trở lại xem để hiển thị. Lỗi
xác nhận sẽ tự động được hiển thị bằng cách sử dụng the@Html.ValidationMessageFor HTML Helper.
Kiểm tra mẫu Create
Để kiểm tra này ra, chạy các ứng dụng và duyệt / StoreManager / Tạo / - điều này sẽ cho bạn thấy
hình thức trống được trả về bởi phương pháp StoreController HTTP-GET Create.
Điền vào một số giá trị và click vào nút Create để gửi biểu mẫu.
Xử lý chỉnh sửa
Cặp đôi hành động Edit (HTTP-GET và HTTP POST) là rất tương tự như các phương pháp hành động
Create chúng tôi chỉ nhìn. Kể từ khi kịch bản chỉnh sửa liên quan đến làm việc với một album hiện có,
Edit HTTP-GET tải phương pháp Album dựa trên các tham số "id", thông qua tại thông qua các tuyến
đường. Mã này để lấy một album của ALBUMID giống như trước đó chúng tôi đã nhìn vào trong hành
động chi tiết điều khiển. Với phương pháp Create / HTTP GET, thả xuống giá trị được trả về thông qua
ViewBag. Điều này cho phép chúng tôi để trở về một Album như là đối tượng mô hình của chúng tôi
để xem (được gõ vào các lớp Album) trong khi đi qua các dữ liệu bổ sung (ví dụ như một danh sách
các thể loại) thông qua các ViewBag.
Edit by Nhiên IT ( www.eg.vnao.vn )
//
// GET: /StoreManager/Edit/5
public ActionResult Edit(int id)
{
Album album = db.Albums.Find(id);
ViewBag.GenreId = new SelectList(db.Genres, "GenreId",
"Name", album.GenreId);
ViewBag.ArtistId = new SelectList(db.Artists, "ArtistId",
"Name", album.ArtistId);
return View(album);
}
Sửa HTTP-POST hành động rất giống với các hành động HTTP-POST Create. Sự khác biệt duy nhất là
thay vì thêm một album mới vào bộ sưu tập db.Albums, chúng tôi đang tìm kiếm các trường hợp hiện
tại của Album sử dụng db.Entry (album) và thiết lập trạng thái của nó để thay đổi. Này cho Entity
Framework rằng chúng ta đang sửa đổi một album hiện có như trái ngược với tạo một hình mới.
//
// POST: /StoreManager/Edit/5
[HttpPost]
public ActionResult Edit(Album album)
{
if (ModelState.IsValid)
{
db.Entry(album).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.GenreId = new SelectList(db.Genres, "GenreId",
"Name", album.GenreId);
ViewBag.ArtistId = new SelectList(db.Artists, "ArtistId",
"Name", album.ArtistId);
return View(album);
}
Chúng ta có thể kiểm tra điều này bằng cách chạy các ứng dụng và trình duyệt / StoreManger /, sau
đó nhấp vào liên kết Chỉnh sửa cho một album.
Này hiển thị các hình thức Chỉnh sửa hiển thị theo phương pháp HTTP-GET Sửa. Điền vào một số giá
trị và nhấp vào nút Save.
Edit by Nhiên IT ( www.eg.vnao.vn )
Điều này bài viết dưới hình thức lưu các giá trị, và trả lại cho chúng tôi vào danh sách Album, cho thấy
rằng các giá trị đã được cập nhật.
Xử lý xóa
Xóa sau cùng một khuôn mẫu như chỉnh sửa và tạo, bằng cách sử dụng một trong những hành động
điều khiển để hiển thị các hình thức xác nhận, và một bộ điều khiển hành động để xử lý các hình thức
trình.
HTTP-GET Xóa điều khiển hành động là chính xác giống như quản lý trước hành động điều khiển lưu
trữ chi tiết của chúng tôi.
//
// GET: /StoreManager/Delete/5
public ActionResult Delete(int id)
{
Album album = db.Albums.Find(id);
return View(album);
}
Chúng tôi hiển thị một hình thức mạnh mẽ đánh máy một loại Album, bằng cách sử dụng các mẫu
Xóa nội dung xem.
Edit by Nhiên IT ( www.eg.vnao.vn )
Các mẫu Xóa thấy tất cả các lĩnh vực cho mô hình, nhưng chúng ta có thể đơn giản hóa giảm khá một
chút. Thay đổi mã xem trong / Views / StoreManager / Delete.cshtml sau.
@model MvcMusicStore.Models.Album
@{
ViewBag.Title = "Delete";
}
<h2>Delete Confirmation</h2>
<p>Are you sure you want to delete the album titled
<strong>@Model.Title</strong>?
</p>
@using (Html.BeginForm()) {
<p>
<input type="submit" value="Delete" />
</p>
<p>
@Html.ActionLink("Back to
List", "Index")
</p>
}
Này sẽ hiển thị một xác nhận Xóa đơn giản.
Edit by Nhiên IT ( www.eg.vnao.vn )
Nhấp vào nút Delete gây ra các hình thức được gửi trở lại cho máy chủ, thực hiện các hành động
DeleteConfirmed.
//
// POST: /StoreManager/Delete/5
[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(int id)
{
Album album = db.Albums.Find(id);
db.Albums.Remove(album);
db.SaveChanges();
return RedirectToAction("Index");
}
HTTP POST Xóa điều khiển hành động của chúng tôi có những hành động sau đây:
 1. Tải các Album của ID
 2. Xóa nó album và lưu thay đổi
 3. Chuyển hướng đến chỉ số này, cho thấy Album đã được gỡ bỏ khỏi danh sách
Để kiểm tra, chạy ứng dụng và duyệt / StoreManager. Chọn một album từ danh sách và nhấp vào liên
kết Xoá.
Edit by Nhiên IT ( www.eg.vnao.vn )
Này sẽ hiển thị màn hình xác nhận Xóa của chúng tôi.
Nhấp vào nút Delete loại bỏ các album và trả về trang Store Index Manager, trong đó cho thấy rằng
album đã bị xóa.
Edit by Nhiên IT ( www.eg.vnao.vn )
Sử dụng một người trợ giúp HTML tùy chỉnh để truncate văn bản
Chúng tôi đã có một vấn đề tiềm năng với trang Index quản lý cửa hàng của chúng tôi. Tiêu đề Album
của chúng tôi và các thuộc tính Name Artist cả hai có thể đủ dài rằng họ có thể ném ra định dạng
bảng của chúng tôi. Chúng tôi sẽ tạo ra một người trợ giúp HTML tùy chỉnh để cho phép chúng ta dễ
dàng cắt những điều này và các tài sản khác xem của chúng tôi.
Edit by Nhiên IT ( www.eg.vnao.vn )
Cú pháp helper @ Razor đã làm cho nó khá dễ dàng để tạo ra các chức năng trợ giúp của riêng bạn
để sử dụng trong các quan điểm của bạn. Mở / xem / StoreManager / Index.cshtml xem và thêm mã
sau đây trực tiếp sau khi dòng mô hình @.
@helper Truncate(string
input, int length)
{
if (input.Length <= length) {
@input
} else {
@input.Substring(0, length)<text>...</text>
}
}
Edit by Nhiên IT ( www.eg.vnao.vn )
Phương pháp này helper phải mất một chuỗi và chiều dài tối đa cho phép. Nếu văn bản được cung
cấp là ngắn hơn so với chiều dài quy định, helper kết quả đầu ra như-là. Nếu lâu hơn nữa, sau đó nó
cắt các văn bản và làm cho "..." cho phần còn lại.
Bây giờ chúng ta có thể sử dụng helper Cắt ngắn của chúng tôi để đảm bảo rằng cả Tiêu đề Album và
các thuộc tính Name Artist ít hơn 25 ký tự. Mã nhìn đầy đủ bằng cách sử dụng helper Truncate mới
của chúng tôi xuất hiện bên dưới.
@model IEnumerable<MvcMusicStore.Models.Album>
@helper Truncate(string input, int length)
{
if (input.Length <= length) {
@input
} else {
@input.Substring(0, length)<text>...</text>
}
}
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create
New", "Create")
</p>
<table>
<tr>
<th>
Genre
</th>
<th>
Artist
</th>
<th>
Title
</th>
<th>
Price
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Genre.Name)
</td>
<td>
@Truncate(item.Artist.Name, 25)
</td>
<td>
@Truncate(item.Title, 25)
</td>
Edit by Nhiên IT ( www.eg.vnao.vn )
<td>
@Html.DisplayFor(modelItem => item.Price)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.AlbumId }) |
@Html.ActionLink("Details", "Details", new { id=item.AlbumId }) |
@Html.ActionLink("Delete", "Delete", new { id=item.AlbumId })
</td>
</tr>
}
</table>
Bây giờ khi chúng ta duyệt URL / StoreManager /, các album và các chức danh được lưu giữ dưới độ
dài tối đa của chúng tôi
Edit by Nhiên IT ( www.eg.vnao.vn )
Lưu ý: Điều này cho thấy trường hợp đơn giản của việc tạo ra và sử dụng một người trợ giúp trong
một giao diện.Để tìm hiểu thêm về việc tạo ra những người giúp đỡ mà bạn có thể sử dụng trong
trang web của bạn, xem bài đăng blog của tôi: http://bit.ly/mvc3-helper-options
6.Using Data Annotations for Model Validation
Chúng tôi có một vấn đề lớn với Tạo và chỉnh sửa các hình thức của chúng tôi: họ không làm bất kỳ
xác nhận.Chúng ta có thể làm những việc như để lại các trường bắt buộc trống hoặc loại thư trong
lĩnh vực giá, và các lỗi đầu tiên chúng ta sẽ thấy là từ cơ sở dữ liệu.
Chúng ta có thể dễ dàng thêm xác nhận để ứng dụng của chúng tôi bằng cách thêm các chú thích dữ
liệu đến các lớp học mô hình của chúng tôi. Dữ liệu Chú thích cho phép chúng tôi để mô tả các quy
tắc chúng ta muốn áp dụng để tính mô hình của chúng tôi, và ASP.NET MVC sẽ chăm sóc thực thi và
hiển thị thông điệp phù hợp cho người dùng của chúng tôi.
Thêm Validation Mẫu Album của chúng tôi
Chúng tôi sẽ sử dụng các thuộc tính dữ liệu chú thích sau đây:
 Yêu cầu - Chỉ ra rằng bất động sản là một lĩnh vực cần thiết
 DisplayName - Xác định văn bản chúng tôi muốn được sử dụng vào các lĩnh vực hình thức và tin
nhắn xác nhận
 StringLength - Xác định chiều dài tối đa cho một lĩnh vực chuỗi
 Phạm vi - Cung cấp cho một giá trị tối đa và tối thiểu đối với một số lĩnh vực
 Bind - Danh sách các trường để loại trừ hoặc đưa khi ràng buộc các giá trị tham số hoặc hình
thức tính mô hình
 ScaffoldColumn - Cho phép ẩn các lĩnh vực từ các hình thức biên tập viên
Lưu ý: Để biết thêm thông tin về Validation mẫu bằng cách sử dụng các thuộc tính chú thích dữ liệu,
xem tài liệu MSDN tại http://go.microsoft.com/fwlink/?LinkId=159063
Mở lớp Album và thêm dòng sau bằng cách sử dụng báo cáo để đầu.
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
Tiếp theo, cập nhật các tài sản thêm màn hình hiển thị và xác nhận thuộc tính như hình dưới đây.
namespace MvcMusicStore.Models
{
[Bind(Exclude = "AlbumId")]
public class Album
{
[ScaffoldColumn(false)]
public int AlbumId { get; set; }
[DisplayName("Genre")]
public int GenreId { get; set; }
[DisplayName("Artist")]
public int ArtistId { get; set; }
Edit by Nhiên IT ( www.eg.vnao.vn )
[Required(ErrorMessage = "An Album Title is required")]
[StringLength(160)]
public string Title { get; set; }
[Required(ErrorMessage = "Price is required")]
[Range(0.01, 100.00,
ErrorMessage = "Price must be between 0.01 and 100.00")]
public decimal Price { get; set; }
[DisplayName("Album Art URL")]
[StringLength(1024)]
public string AlbumArtUrl { get; set; }
public virtual Genre Genre { get; set; }
public virtual Artist Artist { get; set; }
}
}
Trong khi chúng tôi đang ở đó, chúng tôi cũng đã thay đổi loại và Artist tài sản ảo. Điều này cho phép
Entity Framework để lười biếng tải chúng khi cần thiết.
public virtual Genre Genre { get; set; }
public virtual Artist Artist { get; set; }
Sau đó có thêm các thuộc tính để mô hình Album của chúng tôi, Tạo và chỉnh sửa màn hình ngay lập
tức bắt đầu xác nhận lĩnh vực, bằng cách sử dụng tên hiển thị chúng tôi đã chọn (ví dụ: Album Art Url
thay vì AlbumArtUrl). Chạy ứng dụng và trình duyệt / StoreManager / Tạo.
Edit by Nhiên IT ( www.eg.vnao.vn )
Tiếp theo, chúng tôi sẽ phá vỡ một số quy tắc xác nhận. Nhập giá từ 0 và bỏ trống Tiêu đề. Khi chúng
ta click vào nút Create, chúng ta sẽ thấy form hiển thị với các thông báo lỗi xác nhận cho thấy các
trường không đáp ứng các quy tắc xác nhận chúng tôi đã xác định.
Edit by Nhiên IT ( www.eg.vnao.vn )
Kiểm tra Validation Client-Side
Server-side xác nhận là rất quan trọng từ một quan điểm ứng dụng, bởi vì người dùng có thể phá vỡ
phía máy khách xác nhận. Tuy nhiên, các hình thức trang web mà chỉ thực hiện phía máy chủ xác nhận
hiện ba vấn đề quan trọng.
 1. Người sử dụng đã phải chờ đợi cho biểu mẫu được đăng, xác nhận trên máy chủ, và đáp ứng
được gửi đến trình duyệt của họ.
 2. Người dùng không nhận được thông tin phản hồi ngay lập tức khi họ sửa chữa một lĩnh vực
để nó vượt qua các quy tắc xác nhận.
 3. Chúng tôi đang lãng phí tài nguyên máy chủ để thực hiện logic xác nhận thay vì tận dụng trình
duyệt của người dùng.
May mắn thay, ASP.NET MVC 3 giàn giáo mẫu có xác nhận phía máy khách được xây dựng trong,
không cần công việc bổ sung nào.
Gõ một chữ cái trong lĩnh vực Tiêu đề đáp ứng các yêu cầu xác nhận, do đó, các thông báo xác nhận
được ngay lập tức gỡ bỏ.
Edit by Nhiên IT ( www.eg.vnao.vn )
7.Membership and Authorization
Bộ điều khiển quản lý cửa hàng của chúng tôi hiện đang truy cập vào bất cứ ai truy cập vào trang web
của chúng tôi. Hãy thay đổi điều này để hạn chế cho phép các quản trị viên trang web.
Thêm AccountController Views
Một sự khác biệt giữa ASP.NET MVC đầy đủ 3 mẫu ứng dụng Web và Web ASP.NET MVC 3 rỗng ứng
dụng mẫu là mẫu sản phẩm nào không bao gồm một điều khiển tài khoản. Chúng tôi sẽ thêm một
điều khiển tài khoản bằng cách sao chép một vài tập tin từ một ứng dụng ASP.NET MVC mới được tạo
ra từ ASP.NET MVC đầy đủ 3 mẫu ứng dụng Web.
Tạo một ứng dụng ASP.NET MVC mới bằng cách sử dụng đầy đủ các ASP.NET MVC 3 mẫu ứng dụng
Web và sao chép các tập tin sau đây vào cùng một thư mục trong dự án của chúng tôi:
1. Sao chép AccountController.cs trong thư mục Controllers
2. Sao chép AccountModels trong thư mục Mô hình
3. Tạo một thư mục Tài khoản bên trong thư mục Lần đọc và sao chép tất cả bốn lượt xem trong
Edit by Nhiên IT ( www.eg.vnao.vn )
Thay đổi không gian tên cho các điều khiển và các lớp học mẫu để họ bắt đầu với
MvcMusicStore. Lớp AccountController nên sử dụng tên miền không gian MvcMusicStore.Controllers,
và lớp AccountModels nên sử dụng tên miền không gian MvcMusicStore.Models.
Lưu ý: Những tập tin này cũng có sẵn trong tải về MvcMusicStore-Assets.zip từ đó chúng ta sao chép các
tập tin thiết kế trang web của chúng tôi tại đầu của hướng dẫn. Các tập tin thành viên được đặt trong
thư mục Mã.
Các giải pháp cập nhật như sau:
Thêm một tài hành chính với các trang web cấu hình của ASP.NET
Trước khi chúng tôi yêu cầu ủy quyền trong trang web của chúng tôi, chúng tôi sẽ cần phải tạo ra một
người dùng có quyền truy cập. Cách dễ nhất để tạo một người dùng là sử dụng các trang web được
xây dựng trong cấu hình ASP.NET.
Khởi động trang web cấu hình ASP.NET bằng cách nhấn vào sau biểu tượng trong Solution Explorer.
Này sẽ khởi chạy một trang web cấu hình. Nhấp vào tab Security trên màn hình chủ, sau đó nhấp vào
liên kết "Enable vai trò" ở trung tâm của màn hình.
Edit by Nhiên IT ( www.eg.vnao.vn )
Nhấp vào liên kết "Tạo hoặc Quản lý vai trò".
Edit by Nhiên IT ( www.eg.vnao.vn )
Nhập "Administrator" như tên vai trò và nhấn nút Add Role.
Nhấn nút Back, sau đó nhấn vào liên kết người dùng Create ở phía bên trái.
Edit by Nhiên IT ( www.eg.vnao.vn )
Điền vào các lĩnh vực thông tin người dùng bên trái bằng cách sử dụng các thông tin sau:
Lĩnh vực Giá trị
Tên người dùng Quản trị viên
Mật khẩu password123!
Xác nhận mật khẩu password123!
E-mail (Bất kỳ địa chỉ e-mail sẽ làm việc)
Câu hỏi bảo mật (Bất cứ điều gì bạn muốn)
An ninh trả lời (Bất cứ điều gì bạn muốn)
Lưu ý: Bạn tất nhiên có thể sử dụng bất kỳ mật khẩu bạn muốn. Các mật khẩu trên được hiển thị như là
một ví dụ, và được giả định trong các diễn đàn hỗ trợ trên CodePlex. Thiết lập bảo mật mật khẩu mặc
định yêu cầu một mật khẩu mà là 7 ký tự và chứa một ký tự chữ và số không.
Edit by Nhiên IT ( www.eg.vnao.vn )
Chọn vai trò quản trị cho người dùng này, và nhấn vào nút Create User.
Tại thời điểm này, bạn sẽ thấy một thông báo chỉ ra rằng người sử dụng đã được tạo ra thành công.
Edit by Nhiên IT ( www.eg.vnao.vn )
Bây giờ bạn có thể đóng cửa sổ trình duyệt.
Dựa trên vai trò ủy quyền
Bây giờ chúng ta có thể hạn chế quyền truy cập vào StoreManagerController bằng cách sử dụng
[Duyệt] thuộc tính, quy định cụ thể mà người sử dụng phải có vai trò quản trị để truy cập vào bất kỳ
hành động điều khiển trong lớp.
[Authorize(Roles = "Administrator")]
public class StoreManagerController : Controller
{
// Controller code here
}
Lưu ý: [Duyệt] thuộc tính có thể được đặt trên các phương pháp hành động cụ thể cũng như ở cấp lớp
điều khiển.
Bây giờ duyệt đến / StoreManager Vào hộp thoại:
Sau khi đăng nhập với tài khoản quản trị mới của chúng tôi, chúng tôi có thể đi vào Album Chỉnh sửa
màn hình như trước.
8.Shopping Cart with Ajax Updates
Chúng tôi sẽ cho phép người dùng để đặt album trong giỏ hàng của họ mà không cần đăng ký,
nhưng họ sẽ cần phải đăng ký như là khách để hoàn tất thanh toán. Quá trình mua sắm và thanh toán
sẽ được tách thành hai bộ điều khiển: điều khiển Giỏ hàng cho phép ẩn danh thêm các mục vào giỏ
Edit by Nhiên IT ( www.eg.vnao.vn )
hàng, và điều khiển Checkout đó xử lý các quy trình kiểm tra. Chúng tôi sẽ bắt đầu với Giỏ hàng trong
phần này, sau đó xây dựng quy trình kiểm tra trong phần sau.
Thêm vào giỏ hàng, đặt hàng, và các lớp mô hình OrderDetail
Giỏ hàng của chúng tôi và các quá trình Checkout sẽ làm cho việc sử dụng của một số các lớp học
mới. Kích chuột phải vào thư mục Models và thêm một lớp hàng (Cart.cs) với mã sau đây.
using System.ComponentModel.DataAnnotations;
namespace MvcMusicStore.Models
{
public class Cart
{
[Key]
public int RecordId { get; set; }
public string CartId { get; set; }
public int AlbumId { get; set; }
public int Count { get; set; }
public System.DateTime DateCreated { get; set; }
public virtual Album Album { get; set; }
}
}
Lớp này là khá tương tự như những người khác chúng tôi đã sử dụng cho đến nay, với ngoại lệ của
các thuộc tính [Key] tài sản recordID. Mục của chúng tôi giỏ hàng sẽ có một định danh chuỗi tên là
CartID để cho phép mua sắm vô danh, nhưng bàn bao gồm một phím số nguyên chính được đặt tên
recordID. Theo quy ước, Entity Framework Mã-First hy vọng rằng các khóa chính cho một bảng tên là
giỏ hàng sẽ hoặc là CartId hoặc ID, nhưng chúng ta có thể dễ dàng ghi đè lên rằng thông qua các chú
thích hoặc mã nếu chúng ta muốn. Đây là một ví dụ về làm thế nào chúng ta có thể sử dụng quy ước
đơn giản trong Entity Framework Code-Đầu tiên khi họ phù hợp với chúng tôi, nhưng chúng tôi
không hạn chế bởi họ khi họ không.
Tiếp theo, thêm một lớp Order (Order.cs) với mã sau đây.
using System.Collections.Generic;
namespace MvcMusicStore.Models
{
public partial class Order
{
public int OrderId { get; set; }
public string Username { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public string City { get; set; }
public string State { get; set; }
public string PostalCode { get; set; }
public string Country { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
public decimal Total { get; set; }
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn
Asp net mvc3 music store   egroups vn

More Related Content

What's hot

ASP.NET basic
ASP.NET basicASP.NET basic
ASP.NET basicmeocon21
 
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
 
BÀI 7 Quản lý website và quản trị HOSTING ở mức cơ bản - Giáo trình FPT
BÀI 7 Quản lý website và quản trị HOSTING ở mức cơ bản - Giáo trình FPTBÀI 7 Quản lý website và quản trị HOSTING ở mức cơ bản - Giáo trình FPT
BÀI 7 Quản lý website và quản trị HOSTING ở mức cơ bản - Giáo trình FPTMasterCode.vn
 
Tu hoc microsoft asp.net
Tu hoc microsoft asp.netTu hoc microsoft asp.net
Tu hoc microsoft asp.netnamhh1984ag
 
Bài 9 Hướng dẫn thiết kế website bán hàng trực tuyến bằng Joomla
Bài 9 Hướng dẫn thiết kế website bán hàng trực tuyến bằng JoomlaBài 9 Hướng dẫn thiết kế website bán hàng trực tuyến bằng Joomla
Bài 9 Hướng dẫn thiết kế website bán hàng trực tuyến bằng JoomlaMasterCode.vn
 
Bài 4: Template & điều hướng trang Web - Giáo trình FPT - Có ví dụ kèm theo
Bài 4: Template & điều hướng trang Web - Giáo trình FPT - Có ví dụ kèm theoBài 4: Template & điều hướng trang Web - Giáo trình FPT - Có ví dụ kèm theo
Bài 4: Template & điều hướng trang Web - Giáo trình FPT - Có ví dụ kèm theoMasterCode.vn
 
BÀI 5 Tối ưu hóa thiết kế web và cách làm việc cơ bản trong chế độ hiển thị C...
BÀI 5 Tối ưu hóa thiết kế web và cách làm việc cơ bản trong chế độ hiển thị C...BÀI 5 Tối ưu hóa thiết kế web và cách làm việc cơ bản trong chế độ hiển thị C...
BÀI 5 Tối ưu hóa thiết kế web và cách làm việc cơ bản trong chế độ hiển thị C...MasterCode.vn
 
Báo Cáo Thực Tập Athena--Xây Dựng Website Thương Mại Điện Tử--P1
Báo Cáo Thực Tập Athena--Xây Dựng Website Thương Mại Điện Tử--P1Báo Cáo Thực Tập Athena--Xây Dựng Website Thương Mại Điện Tử--P1
Báo Cáo Thực Tập Athena--Xây Dựng Website Thương Mại Điện Tử--P1Chelsea Phuoc
 
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng webBài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng webMasterCode.vn
 
Thuyet_trinh_de_tai_Joomla
Thuyet_trinh_de_tai_JoomlaThuyet_trinh_de_tai_Joomla
Thuyet_trinh_de_tai_JoomlaTrung Mai
 
BÀI 4 Tinh chỉnh môi trường làm việc và làm việc với cách thành phần trên web...
BÀI 4 Tinh chỉnh môi trường làm việc và làm việc với cách thành phần trên web...BÀI 4 Tinh chỉnh môi trường làm việc và làm việc với cách thành phần trên web...
BÀI 4 Tinh chỉnh môi trường làm việc và làm việc với cách thành phần trên web...MasterCode.vn
 
Create easymoduleinphpfox
Create easymoduleinphpfoxCreate easymoduleinphpfox
Create easymoduleinphpfoxEntu Di
 
Bài 4 Quản trị domain & hosting Windows - Quản trị website
Bài 4 Quản trị domain & hosting Windows - Quản trị websiteBài 4 Quản trị domain & hosting Windows - Quản trị website
Bài 4 Quản trị domain & hosting Windows - Quản trị websiteMasterCode.vn
 

What's hot (20)

Slide1
Slide1Slide1
Slide1
 
ASP.NET basic
ASP.NET basicASP.NET basic
ASP.NET basic
 
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
 
Web203 slide 4
Web203   slide 4Web203   slide 4
Web203 slide 4
 
BÀI 7 Quản lý website và quản trị HOSTING ở mức cơ bản - Giáo trình FPT
BÀI 7 Quản lý website và quản trị HOSTING ở mức cơ bản - Giáo trình FPTBÀI 7 Quản lý website và quản trị HOSTING ở mức cơ bản - Giáo trình FPT
BÀI 7 Quản lý website và quản trị HOSTING ở mức cơ bản - Giáo trình FPT
 
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
 
Joomla developermanual
Joomla developermanualJoomla developermanual
Joomla developermanual
 
Tu hoc microsoft asp.net
Tu hoc microsoft asp.netTu hoc microsoft asp.net
Tu hoc microsoft asp.net
 
Web203 slide 9
Web203   slide 9Web203   slide 9
Web203 slide 9
 
Bài 9 Hướng dẫn thiết kế website bán hàng trực tuyến bằng Joomla
Bài 9 Hướng dẫn thiết kế website bán hàng trực tuyến bằng JoomlaBài 9 Hướng dẫn thiết kế website bán hàng trực tuyến bằng Joomla
Bài 9 Hướng dẫn thiết kế website bán hàng trực tuyến bằng Joomla
 
Bài 4: Template & điều hướng trang Web - Giáo trình FPT - Có ví dụ kèm theo
Bài 4: Template & điều hướng trang Web - Giáo trình FPT - Có ví dụ kèm theoBài 4: Template & điều hướng trang Web - Giáo trình FPT - Có ví dụ kèm theo
Bài 4: Template & điều hướng trang Web - Giáo trình FPT - Có ví dụ kèm theo
 
BÀI 5 Tối ưu hóa thiết kế web và cách làm việc cơ bản trong chế độ hiển thị C...
BÀI 5 Tối ưu hóa thiết kế web và cách làm việc cơ bản trong chế độ hiển thị C...BÀI 5 Tối ưu hóa thiết kế web và cách làm việc cơ bản trong chế độ hiển thị C...
BÀI 5 Tối ưu hóa thiết kế web và cách làm việc cơ bản trong chế độ hiển thị C...
 
Báo Cáo Thực Tập Athena--Xây Dựng Website Thương Mại Điện Tử--P1
Báo Cáo Thực Tập Athena--Xây Dựng Website Thương Mại Điện Tử--P1Báo Cáo Thực Tập Athena--Xây Dựng Website Thương Mại Điện Tử--P1
Báo Cáo Thực Tập Athena--Xây Dựng Website Thương Mại Điện Tử--P1
 
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng webBài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
 
Thuyet_trinh_de_tai_Joomla
Thuyet_trinh_de_tai_JoomlaThuyet_trinh_de_tai_Joomla
Thuyet_trinh_de_tai_Joomla
 
BÀI 4 Tinh chỉnh môi trường làm việc và làm việc với cách thành phần trên web...
BÀI 4 Tinh chỉnh môi trường làm việc và làm việc với cách thành phần trên web...BÀI 4 Tinh chỉnh môi trường làm việc và làm việc với cách thành phần trên web...
BÀI 4 Tinh chỉnh môi trường làm việc và làm việc với cách thành phần trên web...
 
Tìm hiểu về Joomla
Tìm hiểu về Joomla Tìm hiểu về Joomla
Tìm hiểu về Joomla
 
Create easymoduleinphpfox
Create easymoduleinphpfoxCreate easymoduleinphpfox
Create easymoduleinphpfox
 
Bài 4 Quản trị domain & hosting Windows - Quản trị website
Bài 4 Quản trị domain & hosting Windows - Quản trị websiteBài 4 Quản trị domain & hosting Windows - Quản trị website
Bài 4 Quản trị domain & hosting Windows - Quản trị website
 
Web203 slide 8
Web203   slide 8Web203   slide 8
Web203 slide 8
 

Similar to Asp net mvc3 music store egroups vn

Asp.net mvc 3 (c#) (9 tutorials) egroups vn
Asp.net mvc 3 (c#) (9 tutorials)   egroups vnAsp.net mvc 3 (c#) (9 tutorials)   egroups vn
Asp.net mvc 3 (c#) (9 tutorials) egroups vnNguyen Van Hung
 
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á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
 
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
 
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
 
Devexpress cho asp.net
Devexpress cho asp.netDevexpress cho asp.net
Devexpress cho asp.netthichxoidau
 
Bai giangvb.net
Bai giangvb.netBai giangvb.net
Bai giangvb.netvvpcdsptin
 
Bài giảng thiết kế website - truongkinhtethucpham.com
Bài giảng thiết kế website - truongkinhtethucpham.comBài giảng thiết kế website - truongkinhtethucpham.com
Bài giảng thiết kế website - truongkinhtethucpham.commai_non
 
Slide 8 - Thiết kế Web cơ bản
Slide 8 - Thiết kế Web cơ bảnSlide 8 - Thiết kế Web cơ bản
Slide 8 - Thiết kế Web cơ bảnSống Khác
 
Giao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharpGiao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharpngohanty13
 
Book storeonline it-slideshares.blogspot.com
Book storeonline it-slideshares.blogspot.comBook storeonline it-slideshares.blogspot.com
Book storeonline it-slideshares.blogspot.comphanleson
 

Similar to Asp net mvc3 music store egroups vn (20)

Asp.net mvc 3 (c#) (9 tutorials) egroups vn
Asp.net mvc 3 (c#) (9 tutorials)   egroups vnAsp.net mvc 3 (c#) (9 tutorials)   egroups vn
Asp.net mvc 3 (c#) (9 tutorials) egroups vn
 
Aspnet 3.5_03
Aspnet 3.5_03Aspnet 3.5_03
Aspnet 3.5_03
 
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á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
 
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
 
Web301 slide 1
Web301   slide 1Web301   slide 1
Web301 slide 1
 
Nguyentrongnghia
NguyentrongnghiaNguyentrongnghia
Nguyentrongnghia
 
Lap trinhcosodulieuvoi c-sharp_phan-1
Lap trinhcosodulieuvoi c-sharp_phan-1Lap trinhcosodulieuvoi c-sharp_phan-1
Lap trinhcosodulieuvoi c-sharp_phan-1
 
access
accessaccess
access
 
Mvc 3
Mvc 3Mvc 3
Mvc 3
 
Devexpress cho asp.net
Devexpress cho asp.netDevexpress cho asp.net
Devexpress cho asp.net
 
Aspnet 3.5 -06
Aspnet 3.5 -06Aspnet 3.5 -06
Aspnet 3.5 -06
 
Wordpress
WordpressWordpress
Wordpress
 
Bai giangvb.net
Bai giangvb.netBai giangvb.net
Bai giangvb.net
 
Wordress dung
Wordress dungWordress dung
Wordress dung
 
Bài giảng thiết kế website - truongkinhtethucpham.com
Bài giảng thiết kế website - truongkinhtethucpham.comBài giảng thiết kế website - truongkinhtethucpham.com
Bài giảng thiết kế website - truongkinhtethucpham.com
 
Slide 8 - Thiết kế Web cơ bản
Slide 8 - Thiết kế Web cơ bảnSlide 8 - Thiết kế Web cơ bản
Slide 8 - Thiết kế Web cơ bản
 
Giao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharpGiao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharp
 
Book storeonline it-slideshares.blogspot.com
Book storeonline it-slideshares.blogspot.comBook storeonline it-slideshares.blogspot.com
Book storeonline it-slideshares.blogspot.com
 
Gioi thieu joomla
Gioi thieu joomlaGioi thieu joomla
Gioi thieu joomla
 

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

SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...Nguyen Thanh Tu Collection
 
Các điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoáCác điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoámyvh40253
 
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
 
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
 
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
 
3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIĐiện Lạnh Bách Khoa Hà Nội
 
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
 
sách sinh học đại cương - Textbook.pdf
sách sinh học đại cương   -   Textbook.pdfsách sinh học đại cương   -   Textbook.pdf
sách sinh học đại cương - Textbook.pdfTrnHoa46
 
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docxTHAO316680
 
PHÁT TRIỂN DU LỊCH BỀN VỮNG Ở TUYÊN QUANG
PHÁT TRIỂN DU LỊCH BỀN VỮNG Ở TUYÊN QUANGPHÁT TRIỂN DU LỊCH BỀN VỮNG Ở TUYÊN QUANG
PHÁT TRIỂN DU LỊCH BỀN VỮNG Ở TUYÊN QUANGhoinnhgtctat
 
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIGIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIĐiện Lạnh Bách Khoa Hà Nội
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...Nguyen Thanh Tu Collection
 
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdfchuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdfVyTng986513
 
Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................TrnHoa46
 
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
 
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...Nguyen Thanh Tu Collection
 
powerpoint lịch sử đảng cộng sản việt nam.pptx
powerpoint lịch sử đảng cộng sản việt nam.pptxpowerpoint lịch sử đảng cộng sản việt nam.pptx
powerpoint lịch sử đảng cộng sản việt nam.pptxAnAn97022
 
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfCampbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfTrnHoa46
 
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
 

Recently uploaded (20)

SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
 
Các điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoáCác điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoá
 
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 ...
 
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
 
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...
 
3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
 
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...
 
sách sinh học đại cương - Textbook.pdf
sách sinh học đại cương   -   Textbook.pdfsách sinh học đại cương   -   Textbook.pdf
sách sinh học đại cương - Textbook.pdf
 
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
 
PHÁT TRIỂN DU LỊCH BỀN VỮNG Ở TUYÊN QUANG
PHÁT TRIỂN DU LỊCH BỀN VỮNG Ở TUYÊN QUANGPHÁT TRIỂN DU LỊCH BỀN VỮNG Ở TUYÊN QUANG
PHÁT TRIỂN DU LỊCH BỀN VỮNG Ở TUYÊN QUANG
 
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIGIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
 
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdfchuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
 
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
 
Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................
 
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...
 
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...
 
powerpoint lịch sử đảng cộng sản việt nam.pptx
powerpoint lịch sử đảng cộng sản việt nam.pptxpowerpoint lịch sử đảng cộng sản việt nam.pptx
powerpoint lịch sử đảng cộng sản việt nam.pptx
 
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfCampbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
 
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...
 

Asp net mvc3 music store egroups vn

  • 1. Edit by Nhiên IT ( www.eg.vnao.vn ) HƯỚNG DẪN TỪNG BƯỚC TẠO ỨNG DỤNG WEB SHOP MUSIC STORE BẰNG ASP .NET MVC3 (Của Microsoft – Edit bởi MHN IT) 1.Tổng quan và File-> New Project Tổng quan MVC Music Store là một ứng dụng hướng dẫn, giới thiệu và giải thích bước theo các bước làm thế nào để sử dụng ASP.NET MVC và Visual Web Developer để phát triển web. Chúng tôi sẽ bắt đầu từ từ, như vậy mới bắt đầu cấp độ kinh nghiệm phát triển web là okay. Ứng dụng chúng ta sẽ xây dựng một cửa hàng âm nhạc đơn giản. Có ba phần chính ứng dụng: mua sắm, thanh toán và quản trị.
  • 2. Edit by Nhiên IT ( www.eg.vnao.vn ) Du khách có thể duyệt Album theo thể loại: Họ có thể xem một album duy nhất và thêm nó vào giỏ hàng của họ:
  • 3. Edit by Nhiên IT ( www.eg.vnao.vn ) Họ có thể xem lại giỏ hàng của họ, loại bỏ bất kỳ mục nào họ không còn muốn: Căn cứ đến với Checkout sẽ nhắc nhở họ đăng nhập hoặc đăng ký cho một tài khoản người dùng.
  • 4. Edit by Nhiên IT ( www.eg.vnao.vn ) Sau khi tạo một tài khoản, họ có thể hoàn thành các đơn đặt hàng bằng cách điền vào vận chuyển và thông tin thanh toán. Để giữ cho mọi thứ đơn giản, chúng tôi đang chạy một quảng bá tuyệt vời: mọi thứ đều miễn phí nếu họ nhập mã khuyến mãi "miễn phí"!
  • 5. Edit by Nhiên IT ( www.eg.vnao.vn ) Sau khi đặt hàng, họ nhìn thấy một màn hình xác nhận đơn giản: Ngoài Trang faceing khách hàng, chúng tôi cũng sẽ xây dựng một phần quản trị cho thấy một danh sách các album mà từ đó quản trị viên có thể tạo, chỉnh sửa, và xóa các album:
  • 6. Edit by Nhiên IT ( www.eg.vnao.vn ) 1. File -> New Project Cài đặt phần mềm Hướng dẫn này sẽ bắt đầu bằng cách tạo ra một mới ASP.NET MVC 3 dự án sử dụng Visual Web Developer 2010 Express (được miễn phí), và sau đó chúng tôi từng bước sẽ thêm các tính năng để tạo ra một ứng dụng hoạt động đầy đủ. Trên đường đi, chúng tôi sẽ bao gồm truy cập cơ sở dữ liệu, hình thành kịch bản gửi bài, xác nhận dữ liệu, bằng cách sử dụng các trang chủ để bố trí trang phù hợp, bằng cách sử dụng AJAX trang và xác nhận các bản cập nhật, người dùng đăng nhập, và nhiều hơn nữa. Bạn có thể theo bước từng bước, hoặc bạn có thể tải về các ứng dụng hoàn thành từhttp://mvcmusicstore.codeplex.com . Bạn có thể sử dụng Visual Studio 2010 SP1 hoặc Web Developer Visual 2010 Express SP1 (phiên bản miễn phí của Visual Studio 2010) để xây dựng các ứng dụng. Chúng tôi sẽ sử dụng SQL Server Compact (cũng miễn phí) để lưu trữ các cơ sở dữ liệu. Trước khi bạn bắt đầu, hãy chắc chắn rằng bạn đã cài đặt các điều kiện tiên quyết được liệt kê dưới đây. Bạn có thể cài đặt tất cả chúng bằng cách sử dụng Web Platform Installer sau Lưu ý: Bạn có thể tìm thấy liên kết này vào nút màu xanh lá cây lớn tại liên kết này (dễ nhớ): http://asp.net/mvc
  • 7. Edit by Nhiên IT ( www.eg.vnao.vn ) Web Platform Installer sẽ kiểm tra những gì bạn đã cài đặt và chỉ cần tải về những gì bạn cần. Nếu bạn muốn cá nhân cài đặt các điều kiện tiên quyết bằng cách sử dụng các liên kết sau đây thay vì sử dụng liên kết ở trên, sử dụng các liên kết sau (viết ra trong trường hợp bạn đang sử dụng một phiên bản in của hướng dẫn này):  Visual Studio Web Developer Express SP1  ASP.NET MVC 3 Công cụ Cập nhật http://www.microsoft.com/web/handlers/webpi.ashx?command=getinstallerredirect&appid =MVC3  SQL Server Compact 4,0 - bao gồm cả thời gian chạy và công cụ hỗ trợ
  • 8. Edit by Nhiên IT ( www.eg.vnao.vn ) Lưu ý: Nếu bạn đang sử dụng Visual Studio 2010 thay vì Visual Web Developer 2010, cài đặt các điều kiện tiên quyết với liên kết này thay vì: Visual Studio Web Developer Express SP1 Tôi rất khuyên bạn sử dụng liên kết cài đặt nền tảng web đầu tiên, vì nó sẽ làm cho chắc chắn rằng bạn đã có tất cả mọi thứ được thiết lập đúng. Tạo một dự án mới ASP.NET MVC 3 Chúng tôi sẽ bắt đầu bằng cách chọn "New Project" từ menu File trong Visual Web Developer. Điều này sẽ làm xuất hiện hộp thoại New Project. Chúng tôi sẽ chọn Visual C # -> Web Templates nhóm bên trái, sau đó chọn "ASP.NET MVC 3 Web Application" mẫu trong cột trung tâm. Tên MvcMusicStore dự án của bạn và nhấn nút OK. Điều này sẽ hiển thị một hộp thoại thứ cấp cho phép chúng tôi để làm cho một số cài đặt cụ thể MVC cho dự án của chúng tôi. Chọn như sau: Dự án Template - chọn Empty Xem Engine - Razor chọn Sử dụng HTML5 ngữ nghĩa đánh dấu kiểm tra Xác minh rằng các thiết lập của bạn như hình dưới đây, sau đó nhấn nút OK.
  • 9. Edit by Nhiên IT ( www.eg.vnao.vn ) Điều này sẽ tạo ra dự án của chúng tôi. Chúng ta hãy nhìn vào các thư mục đã được thêm vào ứng dụng của chúng tôi trong Solution Explorer ở phía bên phải.
  • 10. Edit by Nhiên IT ( www.eg.vnao.vn ) Các mẫu MVC 3 rỗng không phải là hoàn toàn trống rỗng - nó sẽ thêm một cấu trúc thư mục cơ bản: ASP.NET MVC làm cho việc sử dụng của một số quy ước đặt tên cơ bản cho tên thư mục: Thư mục Mục đích / Controllers Bộ điều khiển đáp ứng với đầu vào từ trình duyệt, quyết định phải làm gì với nó, và trở lại đáp ứng cho người sử dụng. / Views Xem giữ các mẫu giao diện người dùng của chúng tôi
  • 11. Edit by Nhiên IT ( www.eg.vnao.vn ) / Models Mô hình tổ chức và thao tác dữ liệu / Content Thư mục này nắm giữ hình ảnh của chúng tôi, CSS, và bất kỳ nội dung tĩnh khác / Scripts Thư mục này chứa các tập tin JavaScript của chúng tôi Các thư mục này bao gồm ngay cả trong một ứng dụng ASP.NET MVC rỗng vì ASP.NET MVC framework theo mặc định sử dụng một "quy ước về cấu hình" phương pháp tiếp cận và làm cho một số giả định mặc định dựa trên quy ước đặt tên thư mục. Ví dụ, bộ điều khiển tìm kiếm xem trong thư mục Views theo mặc định mà không cần phải xác định rõ ràng này trong mã của bạn. Gắn bó với các công ước mặc định làm giảm số lượng mã bạn cần phải viết, và cũng có thể làm cho nó dễ dàng hơn cho các nhà phát triển khác để hiểu dự án của bạn. Chúng tôi sẽ giải thích các công ước hơn khi chúng ta xây dựng ứng dụng của chúng tôi. Xin vui lòng sử dụng các cuộc thảo luận của http://mvcmusicstore.codeplex.com cho bất kỳ câu hỏi hoặc nhận xét. 2.Controllers Với các khuôn khổ web truyền thống, các URL đến thường được ánh xạ tới các tập tin trên đĩa. Ví dụ: một yêu cầu cho một URL như "products.aspx /" hoặc "Products.php /" có thể được xử lý bởi một tập tin "products.aspx" hoặc "Products.php". Khuôn khổ MVC dựa trên web bản đồ các URL để mã máy chủ trong một cách hơi khác nhau. Thay vì lập bản đồ các URL đến các tập tin, thay vào đó họ bản đồ các URL với các phương pháp trên lớp. Các lớp này được gọi là "điều khiển" và họ có trách nhiệm để xử lý các yêu cầu HTTP đến, xử lý đầu vào của người dùng, lấy và lưu dữ liệu, và xác định phản ứng để gửi lại cho khách hàng (hiển thị HTML, tải về một tập tin, chuyển hướng đến một URL khác nhau, vv). Thêm một HomeController Chúng tôi sẽ bắt đầu MVC cửa hàng ứng dụng âm nhạc của chúng tôi bằng cách thêm một lớp điều khiển sẽ xử lý các URL trang chủ của trang web của chúng tôi. Chúng tôi sẽ thực hiện theo mặc định quy ước đặt tên của ASP.NET MVC và gọi nó là HomeController. Kích chuột phải vào "điều khiển" thư mục trong Solution Explorer và chọn "Add", và sau đó là "điều khiển ..." lệnh:
  • 12. Edit by Nhiên IT ( www.eg.vnao.vn ) Điều này sẽ mang đến "Thêm điều khiển" hộp thoại. Tên điều khiển "HomeController" và nhấn nút Add. Điều này sẽ tạo ra một tập tin mới, HomeController.cs, với mã sau đây: using System;
  • 13. Edit by Nhiên IT ( www.eg.vnao.vn ) using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MvcMusicStore.Controllers { public class HomeController : Controller { // // GET: /Home/ public ActionResult Index() { return View(); } } } Để bắt đầu càng đơn giản càng tốt, chúng ta hãy thay thế các phương pháp Index với một phương pháp đơn giản mà chỉ cần trả về một chuỗi. Chúng tôi sẽ thực hiện hai thay đổi:  Thay đổi phương thức trả về một chuỗi thay vì một ActionResult  Thay đổi tuyên bố trở lại để trở về "từ Home" Phương pháp bây giờ sẽ giống như thế này: public string Index() { return "Hello from Home"; } Chạy các ứng dụng Bây giờ hãy chạy các trang web. Chúng tôi có thể bắt đầu máy chủ web của chúng tôi và thử các trang web bằng cách sử dụng bất kỳ sau đây ::  Chọn Debug ⇨ Bắt đầu Debugging mục trình đơn  Click nút mũi tên xanh trên thanh công cụ  Sử dụng các phím tắt bàn phím, F5. Sử dụng bất kỳ các bước trên sẽ biên dịch dự án của chúng tôi, và sau đó gây ra sự phát triển ASP.NET Server đó là được xây dựng vào Visual Web Developer để bắt đầu. Một thông báo sẽ xuất hiện ở góc dưới cùng của màn hình để chỉ ra rằng phát triển ASP.NET Server đã bắt đầu, và sẽ hiển thị số cổng mà nó đang chạy theo.
  • 14. Edit by Nhiên IT ( www.eg.vnao.vn ) Visual Web Developer sau đó sẽ tự động mở một cửa sổ trình duyệt có URL điểm đến máy chủ web của chúng tôi.Điều này sẽ cho phép chúng tôi nhanh chóng thử các ứng dụng web của chúng tôi: Được rồi, đó là khá nhanh chóng, chúng tôi tạo ra một trang web mới, bổ sung thêm một chức năng dòng ba, và chúng tôi đã có văn bản trong một trình duyệt. Không tên lửa khoa học, nhưng đó là một sự khởi đầu. Lưu ý: Visual Web Developer bao gồm ASP.NET Phát triển Server, mà sẽ chạy trang web của bạn trên một ngẫu nhiên số "cổng". Trong hình trên, các trang web đang chạy tại http://localhost:26641/, do đó, nó sử dụng cổng 26.641. Số cổng của bạn sẽ khác nhau. Khi chúng ta nói về URL như / Store / trong hướng dẫn này, mà sẽ đi sau khi số cổng. Giả sử một số cổng của 26.641, trình duyệt / Store / Browse sẽ có nghĩa là duyệt tới http://localhost:26641/Store/Browse. Thêm một StoreController Chúng tôi đã thêm một HomeController đơn giản mà thực hiện trang chủ của trang web của chúng tôi. Bây giờ chúng ta hãy thêm một bộ điều khiển mà chúng ta sẽ sử dụng để thực hiện các chức năng duyệt web của cửa hàng âm nhạc của chúng tôi. Điều khiển cửa hàng của chúng tôi sẽ hỗ trợ ba kịch bản:  Một trang liệt kê các thể loại âm nhạc trong cửa hàng âm nhạc của chúng tôi  Một trang duyệt liệt kê tất cả các album âm nhạc trong một thể loại cụ thể  Một trang chi tiết cho thấy thông tin về một album nhạc cụ thể Chúng tôi sẽ bắt đầu bằng cách thêm một lớp StoreController mới .. Nếu bạn chưa có, ngừng chạy các ứng dụng, hoặc bằng cách đóng trình duyệt hoặc chọn Debug ⇨ Dừng Debugging mục trình đơn. Bây giờ thêm một StoreController mới. Cũng giống như chúng tôi đã làm với HomeController, chúng tôi sẽ làm điều này bằng cách kích chuột phải vào thư mục "điều khiển" trong Solution Explorer và chọn Add-> mục trình đơn điều khiển
  • 15. Edit by Nhiên IT ( www.eg.vnao.vn ) StoreController mới của chúng tôi đã có một phương pháp "Index". Chúng tôi sẽ sử dụng phương pháp "Index" để thực hiện trang danh sách của chúng tôi liệt kê tất cả các thể loại trong cửa hàng âm nhạc của chúng tôi. Chúng tôi cũng sẽ thêm hai phương pháp bổ sung để thực hiện hai kịch bản khác mà chúng tôi muốn StoreController của chúng tôi để xử lý: Duyệt và chi tiết. Những phương pháp này (Index, Duyệt và chi tiết) trong vòng điều khiển của chúng tôi được gọi là "Hành động điều khiển", và như bạn đã thấy với phương pháp hành động HomeController.Index (), công việc của họ là để đáp ứng các yêu cầu URL (nói chung) xác định những nội dung cần được gửi trở lại trình duyệt hoặc người dùng mà gọi URL. Chúng tôi sẽ bắt đầu thực hiện StoreController của chúng tôi bằng cách thay đổi theIndex () phương pháp để trả lại chuỗi "Hello từ Store.Index ()" và chúng tôi sẽ thêm các phương pháp tương tự cho Duyệt () và chi tiết (): using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MvcMusicStore.Controllers { public class StoreController : Controller { // // GET: /Store/ public string Index() { return "Hello from Store.Index()";
  • 16. Edit by Nhiên IT ( www.eg.vnao.vn ) } // // GET: /Store/Browse public string Browse() { return "Hello from Store.Browse()"; } // // GET: /Store/Details public string Details() { return "Hello from Store.Details()"; } } } Khởi động dự án một lần nữa và duyệt các URL sau:  / Store  / Store /Browes  / Store / Details Truy cập vào các URL sẽ gọi các phương thức hành động trong điều khiển và phản ứng chuỗi trở lại của chúng tôi: Đó là tuyệt vời, nhưng đây là những chỉ là chuỗi liên tục. Hãy làm cho họ năng động, vì vậy họ lấy thông tin từ URL và hiển thị nó trong đầu ra của trang. Trước tiên, chúng tôi sẽ thay đổi phương thức hành động Browse để lấy một giá trị chuỗi truy vấn từ URL. Chúng ta có thể làm điều này bằng cách thêm vào một "thể loại" tham số phương pháp hành động của chúng tôi. Khi chúng ta làm điều này ASP.NET MVC sẽ tự động vượt qua bất kỳ chuỗi truy vấn hoặc các thông số bài mẫu có tên là "thể loại" phương pháp hành động của chúng tôi khi nó được gọi. //
  • 17. Edit by Nhiên IT ( www.eg.vnao.vn ) // GET: /Store/Browse?genre=Disco public string Browse(string genre) { string message = HttpUtility.HtmlEncode("Store.Browse, Genre = " + genre); return message; } Lưu ý: Chúng tôi đang sử dụng các phương pháp hữu ích HttpUtility.HtmlEncode để khử trùng đầu vào người dùng. Điều này ngăn cản người sử dụng tiêm chích Javascript vào Xem của chúng tôi với một liên kết như / Store / Duyệt Genre = <script> window.location = 'http://hackersite.com' </ script>. Bây giờ hãy duyệt đến / Store / Browse?Genre = Disco Chúng ta hãy tiếp theo thay đổi hành động chi tiết để đọc và hiển thị một tham số đầu vào có tên là ID. Không giống như các phương pháp trước đó của chúng tôi, chúng tôi sẽ không được nhúng giá trị ID như một tham số chuỗi truy vấn. Thay vào đó, chúng ta sẽ nhúng nó trực tiếp trong URL của chính nó. Ví dụ: / Store/Details/5. ASP.NET MVC cho phép chúng ta dễ dàng làm được điều này mà không cần phải cấu hình bất cứ điều gì. ASP.NET MVC của quy ước mặc định định tuyến là để điều trị các phân đoạn của một URL sau tên phương pháp hành động như là một tham số có tên là "ID". Nếu phương pháp hành động của bạn có một tham số có tên là ID sau đó ASP.NET MVC sẽ tự động thông qua các phân đoạn URL với bạn như một tham số. // // GET: /Store/Details/5
  • 18. Edit by Nhiên IT ( www.eg.vnao.vn ) public string Details(int id) { string message = "Store.Details, ID = " + id; return message; } Chạy ứng dụng và trình duyệt / Store/Details/5: Hãy tóm tắt lại những gì chúng tôi đã thực hiện cho đến nay:  Chúng tôi đã tạo ra một ASP.NET MVC dự án mới trong Visual Web Developer  Chúng tôi đã thảo luận về cấu trúc thư mục cơ bản của một ứng dụng ASP.NET MVC  Chúng tôi đã học được làm thế nào để chạy trang web của chúng tôi sử dụng máy chủ phát triển ASP.NET  Chúng tôi đã tạo ra hai điều khiển lớp học: HomeController và StoreController  Chúng tôi đã thêm phương pháp hành động để điều khiển của chúng tôi đáp ứng các yêu cầu URL và trở về văn bản để trình duyệt 3.Views and ViewModels Vì vậy, đến nay chúng tôi đã chỉ được trở về chuỗi từ hành động điều khiển. Đó là một cách tốt đẹp để có được một ý tưởng về bộ điều khiển làm việc như thế nào, nhưng nó không phải là làm thế nào bạn muốn để xây dựng một ứng dụng web thực sự. Chúng tôi sẽ muốn có một cách tốt hơn để tạo ra HTML cho các trình duyệt truy cập vào trang web của chúng tôi - một trong những nơi mà chúng ta có thể sử dụng các tập tin mẫu để tùy chỉnh dễ dàng hơn nội dung HTML gửi lại. Đó là chính xác những gì Lần đọc làm.
  • 19. Edit by Nhiên IT ( www.eg.vnao.vn ) Thêm một mẫu View Để sử dụng một cái nhìn mẫu, chúng tôi sẽ thay đổi phương pháp Index HomeController để trả lại một ActionResult, và nó trở lại View (), như dưới đây: public class HomeController : Controller { // // GET: /Home/ public ActionResult Index() { return View(); } } Sự thay đổi trên chỉ ra rằng thay vì trả lại một chuỗi, chúng tôi thay vì muốn sử dụng một "View" để tạo ra một kết quả trở lại. Bây giờ chúng ta sẽ thêm một mẫu xem thích hợp cho dự án của chúng tôi. Để làm điều này, chúng tôi sẽ xác định vị trí con trỏ văn bản trong phương pháp hành động Index, sau đó nhấp chuột phải và chọn "Add View". Điều này sẽ mang đến hộp thoại Add Xem:
  • 20. Edit by Nhiên IT ( www.eg.vnao.vn ) "Thêm Xem" hộp thoại cho phép chúng tôi một cách nhanh chóng và dễ dàng tạo ra các tập tin template Xem.Theo mặc định, "Thêm" hộp thoại trước populates tên của mẫu View để tạo ra để nó phù hợp với phương pháp hành động mà sẽ sử dụng nó. Bởi vì chúng tôi sử dụng "Add View" menu ngữ cảnh trong Index () phương pháp hành động của HomeController của chúng tôi, hộp thoại "Add View" ở trên có "Index" như tên xem được phổ biến trước theo mặc định. Chúng ta không cần thay đổi bất kỳ các tùy chọn trên hộp thoại này, do đó, nhấp vào nút Add. Khi nhấn vào nút Add, Visual Web Developer sẽ tạo ra một mẫu Index.cshtml nhìn mới cho chúng tôi trong thư mục Xem thư mục , tạo thư mục nếu không tồn tại.
  • 21. Edit by Nhiên IT ( www.eg.vnao.vn ) Tên và vị trí thư mục của tập tin "Index.cshtml" là quan trọng, và theo mặc định ASP.NET MVC đặt tên quy ước. Tên thư mục Views Home, phù hợp với bộ điều khiển được HomeController đặt tên. Xem các mẫu tên, Index, phù hợp với phương pháp hành động điều khiển sẽ được hiển thị xem. ASP.NET MVC cho phép chúng tôi để tránh việc phải xác định rõ ràng tên hoặc vị trí của một mẫu xem khi chúng ta sử dụng quy ước đặt tên này để trả lại một cái nhìn. Nó theo mặc định sẽ làm Views Trang chủ Index.cshtml xem mẫu này khi chúng ta viết đoạn mã như sau trong HomeController của chúng tôi: public class HomeController : Controller { // // GET: /Home/ public ActionResult Index() { return View(); } } Visual Web Developer tạo ra và mở "mẫu" Index.cshtml xem sau khi chúng tôi nhấp vào nút "Add" trong hộp thoại "Add View". Các nội dung của Index.cshtml được hiển thị dưới đây. @{ ViewBag.Title = "Index"; } <h2>Index</h2> Điểm này bằng cách sử dụng cú pháp Razor, ngắn gọn hơn so với công cụ Web Forms điểm được sử dụng trong ASP.NET Web Forms và các phiên bản trước của ASP.NET MVC. Web Forms xem động cơ
  • 22. Edit by Nhiên IT ( www.eg.vnao.vn ) là vẫn còn có sẵn trong ASP.NET MVC 3, nhưng nhiều nhà phát triển thấy rằng các công cụ xem Razor phù hợp với phát triển ASP.NET MVC thực sự tốt. Ba dòng đầu tiên đặt tiêu đề trang bằng cách sử dụng ViewBag.Title. Chúng tôi sẽ xem xét làm thế nào các công trình này chi tiết hơn ngay sau đó, nhưng trước tiên hãy sửa tiêu đề văn bản văn bản và xem trang. Cập nhật thẻ <h2> nói "Đây là Trang" như hình dưới đây. @{ ViewBag.Title = "Index"; } <h2>This is the Home Page</h2> Chạy các ứng dụng cho thấy rằng văn bản mới của chúng tôi có thể nhìn thấy trên trang chủ. Sử dụng một diện cho các yếu tố trang web phổ biến Hầu hết các trang web có nội dung được chia sẻ giữa nhiều trang: chuyển hướng, cuối trang, hình ảnh logo, tài liệu tham khảo stylesheet, công cụ xem Razor làm cho điều này dễ dàng quản lý bằng cách sử dụng một trang _Layout.cshtml gọi là đã tự động được tạo ra cho chúng ta bên trong / Lần đọc / thư mục Shared.
  • 23. Edit by Nhiên IT ( www.eg.vnao.vn ) Double-click vào thư mục này để xem nội dung đượ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> @RenderBody() </body> </html> Các nội dung từ quan điểm cá nhân của chúng tôi sẽ được hiển thị bằng RenderBody @ () lệnh, và bất kỳ nội dung nào phổ biến mà chúng tôi muốn xuất hiện bên ngoài mà có thể được thêm vào các đánh dấu _Layout.cshtml.Chúng tôi sẽ muốn MVC Music Store của chúng tôi để có một tiêu đề phổ biến với các liên kết đến trang chủ của chúng tôi và khu vực Store trên tất cả các trang trong trang web, vì vậy chúng tôi sẽ thêm rằng mẫu trực tiếp ở trên mà tuyên bố @ RenderBody (). <!DOCTYPE html> <html> <head> <title>@ViewBag.Title</title> <link href="@Url.Content("~/Content/Site.css")"
  • 24. Edit by Nhiên IT ( www.eg.vnao.vn ) rel="stylesheet" type="text/css" /> <script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script> </head> <body> <div id="header"> <h1> ASP.NET MVC MUSIC STORE</h1> <ul id="navlist"> <li class="first"><a href="/" id="current">Home</a></li> <li><a href="/Store/">Store</a></li> </ul> </div> @RenderBody() </body> </html> Cập nhật StyleSheet Các dự án mẫu trống bao gồm một tập tin CSS rất hợp lý mà chỉ cần bao gồm các phong cách được sử dụng để hiển thị các thông báo xác nhận. Nhà thiết kế của chúng tôi đã cung cấp thêm một số CSS và hình ảnh để xác định xem và cảm nhận cho trang web của chúng tôi, vì vậy chúng tôi sẽ thêm những người bây giờ. CSS cập nhật tập tin và hình ảnh được bao gồm trong thư mục nội dung của Assets.zip- MvcMusicStore trong đó có sẵn tại http://mvcmusicstore.codeplex.com. Chúng tôi sẽ chọn cả hai người trong số họ trong Windows Explorer và thả chúng vào thư mục Content Giải pháp của chúng tôi trong Visual Web Developer, như hình dưới đây: Bạn sẽ được yêu cầu xác nhận nếu bạn muốn ghi đè lên file Site.css hiện có. Nhấn Yes.
  • 25. Edit by Nhiên IT ( www.eg.vnao.vn ) Các thư mục nội dung của các ứng dụng của bạn sẽ xuất hiện như sau: Bây giờ hãy chạy ứng dụng và xem thay đổi của chúng tôi trông như thế nào trên trang chủ.
  • 26. Edit by Nhiên IT ( www.eg.vnao.vn )  Ta hãy xem xét những gì đang thay đổi: Chỉ số phương pháp hành động của HomeController tìm thấy và hiển thị Views Trang chủ Index.cshtmlView mẫu, mặc dù mã của chúng tôi gọi là "return View ()", bởi vì mẫu của chúng tôi theo các tiêu chuẩn quy ước đặt tên.  Trang được hiển thị một thông điệp đơn giản chào đón được định nghĩa trong Views Home mẫu Index.cshtml xem.  Trang sử dụng mẫu _Layout.cshtml của chúng tôi, và do đó, thông điệp chào mừng được chứa trong tiêu chuẩn bố trí trang web HTML. Sử dụng một mô hình truyền thông tin Xem của chúng tôi Mẫu Xem mà chỉ hiển thị HTML hardcoded không phải là đi để làm cho một trang web rất thú vị. Để tạo ra một trang web động, chúng tôi thay vì sẽ muốn vượt qua thông tin từ các hành động điều khiển của chúng tôi vào các mẫu điểm của chúng tôi. Trong mô hình Model-View-Controller, mô hình là thuật ngữ chỉ các đối tượng đại diện cho dữ liệu trong ứng dụng. Thông thường, đối tượng mô hình tương ứng với bảng trong cơ sở dữ liệu của bạn, nhưng họ không có. Điều khiển phương pháp hành động trả lại một ActionResult có thể vượt qua một đối tượng mô hình để xem. Điều này cho phép một điều khiển để sạch đóng gói tất cả các thông tin cần thiết để tạo ra một phản ứng, và sau đó chuyển thông tin này đến một mẫu xem sử dụng để tạo ra các phản ứng thích hợp HTML. Điều này là dễ nhất để hiểu được bằng cách nhìn thấy nó trong hành động, do đó, chúng ta hãy bắt đầu. Đầu tiên chúng ta sẽ tạo ra một số các lớp học mẫu đại diện cho thể loại và album trong cửa hàng của chúng tôi.Hãy bắt đầu bằng cách tạo ra một lớp Genre. Kích chuột phải vào thư mục "Mô hình" trong dự án của bạn, chọn tùy chọn "Class Add", và đặt tên cho tập tin "Genre.cs".
  • 27. Edit by Nhiên IT ( www.eg.vnao.vn ) Sau đó, thêm một tài sản chuỗi Tên công lớp đã được tạo ra: public class Genre { public string Name { get; set; } } Lưu ý: Trong trường hợp bạn đang tự hỏi, {get; thiết lập;} ký hiệu được sử dụng các tính năng của C # 's thuộc tính tự động thực hiện. Điều này mang lại cho chúng ta những lợi ích của một bất động sản mà không đòi hỏi chúng ta tuyên bố một lĩnh vực sao lưu.
  • 28. Edit by Nhiên IT ( www.eg.vnao.vn ) Tiếp theo, hãy làm theo các bước tương tự để tạo ra một lớp Album (đặt tên Album.cs) mà có một Tiêu đề và tài sản Genre: public class Album { public string Title { get; set; } public Genre Genre { get; set; } } Bây giờ chúng ta có thể sửa đổi StoreController sử dụng Xem hiển thị thông tin động từ mô hình của chúng tôi.Nếu - cho mục đích trình diễn ngay bây giờ - chúng tôi đặt tên Album của chúng tôi dựa trên ID yêu cầu, chúng tôi có thể hiển thị thông tin đó như trong giao diện dưới đây. Chúng tôi sẽ bắt đầu bằng cách thay đổi các chi tiết hành động Store do đó, nó cho thấy các thông tin cho một album duy nhất. Thêm một "sử dụng" tuyên bố để đầu StoreControllers lớp để bao gồm các không gian tên MvcMusicStore.Models, nên chúng tôi không cần phải gõ MvcMusicStore.Models.Album mỗi lần chúng tôi muốn sử dụng lớp album. "Usings" của lớp đó sẽ xuất hiện như dưới đây. using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using MvcMusicStore.Models; Tiếp theo, chúng tôi sẽ cập nhật các hành động điều khiển để nó trả về một ActionResult chứ không phải là một chuỗi, như chúng ta đã làm với phương pháp Index của HomeController.
  • 29. Edit by Nhiên IT ( www.eg.vnao.vn ) public ActionResult Details(int id) Bây giờ chúng ta có thể sửa đổi các logic để trở về một đối tượng Album để xem. Sau đó trong hướng dẫn này, chúng tôi sẽ được lấy dữ liệu từ một cơ sở dữ liệu - nhưng cho ngay bây giờ, chúng tôi sẽ sử dụng "dữ liệu giả" để bắt đầu. public ActionResult Details(int id) { var album = new Album { Title = "Album " + id }; return View(album); } Lưu ý: Nếu bạn không quen với C #, bạn có thể giả định rằng việc sử dụng các phương tiện var là biến album của chúng tôi là giới hạn cuối. Đó là không đúng - các C # trình biên dịch sử dụng loại-suy luận dựa trên những gì chúng ta đang gán cho biến để xác định rằng album Album loại và biên dịch các biến album địa phương như là một loại Album, vì vậy chúng tôi có được thời gian biên dịch kiểm tra và trực quan Studio hỗ trợ biên tập mã. Bây giờ chúng ta hãy tạo ra một mẫu View sử dụng Album của chúng tôi để tạo ra một phản ứng HTML. Trước khi chúng tôi làm điều đó chúng ta cần phải xây dựng dự án để hộp thoại Add Xem biết về lớp Album mới được tạo ra của chúng tôi. Bạn có thể xây dựng dự án bằng cách chọn Debug ⇨ Xây dựng MvcMusicStore mục trình đơn (cho thêm tín dụng, bạn có thể sử dụng phím tắt Ctrl-Shift-B để xây dựng các dự án). Bây giờ chúng ta đã thiết lập các lớp học của chúng tôi hỗ trợ, chúng tôi đã sẵn sàng để xây dựng mẫu Xem của chúng tôi. Kích chuột phải vào bên trong phương thức chi tiết và chọn "Thêm Xem ..." từ menu ngữ cảnh. Chúng tôi sẽ tạo ra một mẫu Xem mới như chúng tôi đã làm trước đây với HomeController. Vì chúng ta đang tạo ra nó từ StoreController nó theo mặc định sẽ được tạo ra trong một tập tin Views Cửa hàng Index.cshtml.
  • 30. Edit by Nhiên IT ( www.eg.vnao.vn ) Không giống như trước, chúng tôi sẽ kiểm tra "Tạo một mạnh mẽ-gõ" hộp kiểm xem. Chúng tôi sau đó sẽ lựa chọn của chúng tôi "Album" lớp học trong "Xem dữ liệu đẳng cấp" downlist thả. Điều này sẽ gây ra "Thêm Xem" hộp thoại để tạo ra một mẫu Xem hy vọng rằng một đối tượng Album sẽ được thông qua nó để sử dụng. Khi nhấn vào nút "Add" của chúng tôi Views Cửa hàng Details.cshtml mẫu View sẽ được tạo ra, có chứa các mã sau đây. @model MvcMusicStore.Models.Album @{ ViewBag.Title = "Details"; } <h2>Details</h2> Chú ý dòng đầu tiên, mà chỉ ra rằng quan điểm này là mạnh mẽ, gõ vào lớp Album của chúng tôi. Các công cụ xem Razor hiểu rằng nó đã được thông qua một đối tượng Album, vì vậy chúng ta có thể dễ dàng truy cập các thuộc tính mô hình và thậm chí có lợi ích của IntelliSense trong trình soạn thảo Visual Web Developer. Cập nhật thẻ <h2> do đó, nó sẽ hiển thị thuộc tính chủ đề của album bằng cách thay đổi dòng để xuất hiện như sau. <h2>Album: @Model.Title</h2>
  • 31. Edit by Nhiên IT ( www.eg.vnao.vn ) Chú ý IntelliSense đó được kích hoạt khi bạn nhập vào giai đoạn sau từ khóa mẫu @, hiển thị các thuộc tính và phương pháp mà lớp Album hỗ trợ. Bây giờ hãy chạy lại dự án của chúng tôi và truy cập URL / Store/Details/5. Chúng ta sẽ thấy các chi tiết của một Album như dưới đây. Bây giờ chúng ta sẽ thực hiện một cập nhật tương tự cho phương pháp Store hành động Browse. Cập nhật phương pháp để nó trả về một ActionResult và sửa đổi phương pháp logic do đó, nó tạo ra một đối tượng loại mới và trả về cho View. public ActionResult Browse(string genre) { var genreModel = new Genre { Name = genre }; return View(genreModel); } Nhấp chuột phải trong phương pháp Browse và chọn "Thêm View ..." từ menu ngữ cảnh, sau đó thêm một View mạnh mẽ, đánh máy thêm một đánh máy mạnh mẽ với lớp Genre.
  • 32. Edit by Nhiên IT ( www.eg.vnao.vn ) Cập nhật các phần tử <h2> trong mã xem (trong / Views / Store / Browse.cshtml) để hiển thị các thông tin loại. @model MvcMusicStore.Models.Genre @{ ViewBag.Title = "Browse"; } <h2>Browsing Genre: @Model.Name</h2> Bây giờ hãy chạy lại dự án của chúng tôi và duyệt đến các cửa hàng / / Duyệt Genre = Disco URL. Chúng ta sẽ thấy trang Browse hiển thị như dưới đây.
  • 33. Edit by Nhiên IT ( www.eg.vnao.vn ) Cuối cùng, chúng ta hãy làm một bản cập nhật hơi phức tạp hơn để cửa hàng chỉ số phương pháp hành động và xem để hiển thị một danh sách của tất cả các thể loại trong cửa hàng của chúng tôi. Chúng tôi sẽ làm điều đó bằng cách sử dụng một danh sách các thể loại như là đối tượng mô hình của chúng tôi, chứ không phải chỉ một loại duy nhất. public ActionResult Index() { var genres = new List<Genre> { new Genre { Name = "Disco"}, new Genre { Name = "Jazz"}, new Genre { Name = "Rock"} }; return View(genres); } Kích chuột phải vào trong phương pháp Index Store hành động và chọn Add View như trước, chọn loại như các lớp mẫu, và nhấn nút Add.
  • 34. Edit by Nhiên IT ( www.eg.vnao.vn ) Trước tiên, chúng tôi sẽ thay đổi tuyên bố mô hình @ để chỉ ra rằng quan điểm sẽ được mong đợi đối tượng Genre nhau thay vì chỉ một. Thay đổi dòng đầu tiên của / Store / Index.cshtml để đọc như sau: @model IEnumerable<MvcMusicStore.Models.Genre> Này cho các công cụ xem Razor rằng nó sẽ được làm việc với một đối tượng mô hình có thể giữ các đối tượng loại một số. Chúng tôi đang sử dụng một <Genre> IEnumerable hơn là <Genre> một danh sách vì nó chung chung hơn, cho phép chúng ta thay đổi các loại mô hình của chúng tôi sau đó để bất kỳ loại đối tượng hỗ trợ giao diện IEnumerable. Tiếp theo, chúng tôi sẽ lặp qua các đối tượng Genre trong mô hình như thể hiện trong mã xem dưới đây. @model IEnumerable<MvcMusicStore.Models.Genre> @{ ViewBag.Title = "Store"; } <h3>Browse Genres</h3> <p> Select from @Model.Count() genres:</p> <ul> @foreach (var genre in Model)
  • 35. Edit by Nhiên IT ( www.eg.vnao.vn ) { <li>@genre.Name</li> } </ul> Chú ý rằng chúng tôi có hỗ trợ IntelliSense đầy đủ như chúng ta nhập vào mã này, để khi chúng tôi gõ "@ Model." Chúng ta thấy tất cả các phương pháp và tài sản được hỗ trợ bởi một IEnumerable Genre loại. Trong vòng lặp "foreach", Visual Web Developer biết rằng mỗi mục là kiểu Genre, vì vậy chúng ta thấy intellisence cho các loại mỗi Genre. Tiếp theo, các tính năng giàn giáo kiểm tra các đối tượng loại và xác định rằng sẽ có một thuộc tính Name, do đó, nó vòng qua và viết chúng ra. Nó cũng tạo ra Edit, chi tiết, và Xóa liên kết đến mỗi một cá nhân. Chúng tôi sẽ tận dụng lợi thế mà sau này trong quản lý cửa hàng của chúng tôi, nhưng bây giờ chúng tôi muốn có một danh sách đơn giản thay vì. Khi chúng tôi chạy các ứng dụng và duyệt đến / Store, chúng ta thấy rằng cả hai số và danh sách các thể loại được hiển thị.
  • 36. Edit by Nhiên IT ( www.eg.vnao.vn ) Thêm liên kết giữa các trang URL / Store của chúng tôi liệt kê các thể loại hiện đang liệt kê tên loại đơn giản như là văn bản đơn giản. Hãy thay đổi này để mà thay vì văn bản đơn giản, chúng tôi thay vì có tên Genre liên kết đến các cửa hàng / thích hợp / Duyệt URL, vì vậy cách nhấp vào một thể loại âm nhạc như "Disco" sẽ điều hướng đến các cửa hàng / / Browse? Thể loại = Disco URL. Chúng tôi có thể cập nhật của chúng tôi Xem Cửa hàng template Xem Index.cshtml để sản xuất những liên kết này bằng cách sử dụng đoạn mã như sau (không gõ vào trong chúng ta sẽ cải thiện nó) : <ul> @foreach (var genre in Model) { <li><a href="/Store/Browse?genre=@genre.Name">@genre.Name</a></li> } </ul> Điều đó làm việc, nhưng nó có thể dẫn đến những rắc rối sau này vì nó dựa trên một chuỗi hardcoded. Ví dụ, nếu chúng ta muốn đổi tên điều khiển, chúng tôi cần phải tìm kiếm thông qua mã của chúng tôi tìm kiếm các liên kết cần phải được cập nhật. Một phương pháp khác chúng ta có thể sử dụng là để tận dụng lợi thế của một phương pháp trợ giúp HTML.ASP.NET MVC bao gồm các phương pháp trợ giúp HTML trong đó có sẵn từ Xem mẫu mã của chúng tôi để thực hiện một loạt các nhiệm vụ thông thường chỉ như thế này. Html.ActionLink () helper là một phương pháp đặc biệt hữu ích, và làm cho nó dễ dàng để xây dựng các liên kết <a> HTML và chăm sóc những chi tiết gây phiền nhiễu như chắn các đường dẫn URL được mã hóa URL.
  • 37. Edit by Nhiên IT ( www.eg.vnao.vn ) Html.ActionLink () có quá tải khác nhau để cho phép xác định càng nhiều thông tin như bạn cần cho liên kết của bạn. Trong trường hợp đơn giản, bạn sẽ cung cấp các văn bản liên kết và phương pháp hành động để đi đến khi siêu liên kết được nhấp trên máy khách. Ví dụ, chúng ta có thể liên kết đến "Store / /" phương pháp Index () trên trang Chi tiết Store với các văn bản liên kết "Tới Index Store" bằng cách sử dụng các cuộc gọi sau đây: @Html.ActionLink("Go to the Store Index", "Index") Lưu ý: Trong trường hợp này, chúng tôi không cần phải xác định tên điều khiển bởi vì chúng tôi chỉ liên kết đến một hành động khác trong cùng một bộ điều khiển làm cho xem hiện tại. Liên kết của chúng tôi để trang Browse sẽ cần phải vượt qua một tham số, mặc dù, vì vậy chúng tôi sẽ sử dụng một tình trạng quá tải của phương pháp Html.ActionLink mất ba thông số:  1. Liên kết văn bản, mà sẽ hiển thị tên loại  2. Tên điều khiển hành động (Duyệt)  3. Route giá trị tham số, xác định cả hai tên (loại) và giá trị (Thể loại tên) Đưa rằng tất cả cùng nhau, đây là cách chúng tôi sẽ viết các liên kết để xem Index Store: <ul> @foreach (var genre in Model) { <li>@Html.ActionLink(genre.Name, "Browse", new { genre = genre.Name })</li> } </ul> Bây giờ khi chúng tôi chạy dự án của chúng tôi một lần nữa và truy cập Store / / URL chúng ta sẽ thấy một danh sách các thể loại. Từng thể loại là một liên kết khi nhấn vào nó sẽ đưa chúng ta Store / / Duyệt thể loại = [thể loại]URL.
  • 38. Edit by Nhiên IT ( www.eg.vnao.vn ) HTML cho danh sách thể loại trông như thế này: <ul> <li><a href="/Store/Browse?genre=Disco">Disco</a> </li> <li><a href="/Store/Browse?genre=Jazz">Jazz</a> </li> <li><a href="/Store/Browse?genre=Rock">Rock</a> </li> </ul> 4.Models and Data Access Cho đến nay, chúng tôi đã chỉ được đi qua "dữ liệu giả" từ bộ điều khiển của chúng tôi vào các mẫu Xem của chúng tôi. Bây giờ chúng tôi đã sẵn sàng để treo lên một cơ sở dữ liệu thực tế. Trong hướng dẫn này, chúng tôi sẽ được bao gồm làm thế nào để sử dụng SQL Server Compact Edition (thường gọi là SQL CE) là công cụ cơ sở dữ liệu của chúng tôi. SQL CE là một, miễn phí, cơ sở dữ liệu, nhúng dựa trên tập tin mà không yêu cầu bất kỳ cài đặt hoặc cấu hình, mà làm cho nó thực sự thuận tiện cho sự phát triển của địa phương. Truy cập cơ sở dữ liệu với Entity Framework Mã-First Chúng tôi sẽ sử dụng khung Entity (EF) hỗ trợ được bao gồm trong ASP.NET MVC 3 dự án để truy vấn và cập nhật cơ sở dữ liệu. EF là một đối tượng linh hoạt bản đồ quan hệ (ORM) dữ liệu API cho phép các nhà phát triển để truy vấn và cập nhật dữ liệu được lưu trữ trong một cơ sở dữ liệu một cách hướng đối tượng. Entity Framework phiên bản 4 hỗ trợ một mô hình phát triển gọi là code đầu tiên. Mã đầu tiên cho phép bạn tạo ra các mô hình đối tượng bằng cách viết các lớp học đơn giản (còn được gọi là POCO từ "đồng bằng cũ" đối tượng CLR), và thậm chí có thể tạo ra cơ sở dữ liệu trên bay từ các lớp học của bạn. Thay đổi các lớp mô hình của chúng tôi Chúng tôi sẽ tận dụng các tính năng tạo cơ sở dữ liệu trong Entity Framework trong hướng dẫn này. Trước khi chúng tôi làm điều đó, mặc dù, chúng ta hãy làm một vài thay đổi nhỏ đến các lớp học mô hình của chúng tôi để thêm vào trong một số những điều chúng ta sẽ được sử dụng sau này. Thêm các lớp mô hình Artist Album của chúng tôi sẽ được kết hợp với các nghệ sĩ, vì vậy chúng tôi sẽ thêm một lớp mô hình đơn giản để mô tả một Artist. Thêm một lớp mới các Artist.cs Mô hình thư mục có tên bằng cách sử dụng đoạn mã dưới đây. namespace MvcMusicStore.Models { public class Artist { public int ArtistId { get; set; } public string Name { get; set; } } }
  • 39. Edit by Nhiên IT ( www.eg.vnao.vn ) Cập nhật các lớp mô hình của chúng tôi Cập nhật lớp Album như hình dưới đây. namespace MvcMusicStore.Models { public class Album { public int AlbumId { get; set; } public int GenreId { get; set; } public int ArtistId { get; set; } public string Title { get; set; } public decimal Price { get; set; } public string AlbumArtUrl { get; set; } public Genre Genre { get; set; } public Artist Artist { get; set; } } } Tiếp theo, làm cho các bản cập nhật sau đến lớp loại. using System.Collections.Generic; namespace MvcMusicStore.Models { public partial class Genre { public int GenreId { get; set; } public string Name { get; set; } public string Description { get; set; } public List<Album> Albums { get; set; } } } Thêm thư mục App_Data Chúng tôi sẽ thêm một thư mục App_Data dự án của chúng tôi tổ chức các tập tin SQL Express Server cơ sở dữ liệu của chúng tôi. App_Data là một thư mục đặc biệt trong ASP.NET mà đã có các điều khoản bảo mật truy cập chính xác cho việc truy cập cơ sở dữ liệu. Từ menu Project, chọn Add ASP.NET Folder, sau đó App_Data.
  • 40. Edit by Nhiên IT ( www.eg.vnao.vn ) Tạo một chuỗi kết nối trong file web.config Chúng tôi sẽ thêm một vài dòng vào file cấu hình của trang web để Entity Framework biết làm thế nào để kết nối với cơ sở dữ liệu của chúng tôi. Double-click vào tập tin Web.config nằm trong thư mục gốc của dự án. Di chuyển đến dưới cùng của tập tin này và thêm một phần <connectionStrings> trực tiếp trên dòng cuối cùng, như hình dưới đây.
  • 41. Edit by Nhiên IT ( www.eg.vnao.vn ) <connectionStrings> <add name="MusicStoreEntities" connectionString="Data Source=|DataDirectory|MvcMusicStore.sdf" providerName="System.Data.SqlServerCe.4.0"/> </connectionStrings> </configuration> Thêm một Class ngữ cảnh Kích chuột phải vào thư mục Models và thêm một lớp mới tên là MusicStoreEntities.cs. Lớp này sẽ đại diện cho các bối cảnh cơ sở dữ liệu Entity Framework, và sẽ xử lý tạo của chúng tôi, đọc, cập nhật, và xóa các hoạt động cho chúng tôi. Mã cho lớp này được hiển thị dưới đây. using System.Data.Entity; namespace MvcMusicStore.Models { public class MusicStoreEntities : DbContext { public DbSet<Album> Albums { get; set; } public DbSet<Genre> Genres { get; set; } } } Đó là nó - không có cấu hình khác, giao diện đặc biệt, vv Bằng cách mở rộng các lớp cơ sở DbContext, lớp MusicStoreEntities của chúng tôi là có thể xử lý các hoạt động cơ sở dữ liệu của chúng tôi cho chúng tôi. Bây giờ chúng ta đã có mà nối, chúng ta hãy thêm một vài thuộc tính đến các lớp học mô hình của chúng tôi tận dụng lợi thế của một số thông tin bổ sung trong cơ sở dữ liệu của chúng tôi. Thêm dữ liệu danh mục cửa hàng của chúng tôi Chúng tôi sẽ tận dụng lợi thế của một tính năng trong Entity Framework có thêm "hạt giống" dữ liệu vào một cơ sở dữ liệu mới được tạo ra. Điều này sẽ đặt trước trong danh mục cửa hàng của chúng tôi với một danh sách các thể loại, nghệ sĩ, và album. Các tải về MvcMusicStore-Assets.zip - trong đó bao gồm các tập tin thiết kế trang web của chúng tôi sử dụng trước đó trong hướng dẫn này có một tập tin lớp học với dữ liệu hạt giống này, nằm trong một thư mục tên là Mã.
  • 42. Edit by Nhiên IT ( www.eg.vnao.vn ) Trong thư mục Mã Models /, xác định vị trí file SampleData.cs và thả nó vào thư mục Mô hình trong dự án của chúng tôi, như hình dưới đây. Bây giờ chúng ta cần thêm một dòng mã nói với Entity Framework về điều đó lớp SampleData. Double-click vào tập tin Global.asax trong thư mục gốc của dự án để mở nó ra và thêm dòng sau đây trên phương pháp Application_Start. protected void Application_Start() { System.Data.Entity.Database.SetInitializer( new MvcMusicStore.Models.SampleData()); AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); } Tại thời điểm này, chúng tôi đã hoàn thành công việc cần thiết để cấu hình Entity Framework cho dự án của chúng tôi. Truy vấn cơ sở dữ liệu Bây giờ chúng ta hãy cập nhật StoreController của chúng tôi để thay vì sử dụng "dữ liệu giả" nó thay vì các cuộc gọi vào cơ sở dữ liệu của chúng tôi để truy vấn tất cả các thông tin của nó. Chúng tôi sẽ bắt đầu bằng cách tuyên bố một lĩnh vực trên StoreController giữ một thể hiện của lớp MusicStoreEntities, tên là storeDB: public class StoreController : Controller { MusicStoreEntities storeDB = new MusicStoreEntities();
  • 43. Edit by Nhiên IT ( www.eg.vnao.vn ) Cập nhật Index Store để truy vấn cơ sở dữ liệu Lớp MusicStoreEntities được duy trì bởi khung Entity và đưa ra một tài sản thu cho mỗi bảng trong cơ sở dữ liệu của chúng tôi. Hãy cập nhật StoreController Index hành động của chúng tôi để lấy tất cả các thể loại trong cơ sở dữ liệu của chúng tôi. Trước đây, chúng tôi đã làm điều này bởi các chuỗi dữ liệu cứng mã hóa. Bây giờ chúng ta có thể thay vì chỉ sử dụng Entity Framework ngữ cảnh Generes bộ sưu tập: public ActionResult Index() { var genres = storeDB.Genres.ToList(); return View(genres); } Không có thay đổi cần phải xảy ra mẫu của chúng tôi kể từ khi chúng tôi đang trở về StoreIndexViewModel cùng chúng tôi trở về trước khi chúng tôi chỉ trả về dữ liệu trực tiếp từ cơ sở dữ liệu của chúng tôi tại. Khi chúng tôi điều hành dự án một lần nữa và truy cập vào URL "/ Store", bây giờ chúng ta sẽ thấy một danh sách của tất cả các thể loại trong cơ sở dữ liệu của chúng tôi: Cập nhật Browse Store và chi tiết để sử dụng dữ liệu trực tiếp Với thể loại / Store / Browse = [một số thể loại hành động phương pháp, chúng tôi đang tìm kiếm cho một loại nhạc theo tên. Chúng tôi chỉ mong đợi một kết quả, kể từ khi chúng tôi nên không bao giờ có hai mục cho cùng một loại tên, và vì vậy chúng tôi có thể sử dụng phần mở rộng đơn () trong LINQ để truy vấn cho các đối tượng loại thích hợp như thế này (không gõ này chưa ): var example = storeDB.Genres.Single(g => g.Name == “Disco”);
  • 44. Edit by Nhiên IT ( www.eg.vnao.vn ) Phương pháp đơn mất một biểu thức Lambda như một tham số, trong đó quy định cụ thể mà chúng tôi muốn một đối tượng loại duy nhất như vậy mà tên của nó phù hợp với giá trị mà chúng ta đã xác định. Trong trường hợp trên, chúng tôi đang tải một đối tượng loại duy nhất với một kết hợp giá trị Disco Name. Chúng tôi sẽ tận dụng lợi thế của một tính năng Entity Framework cho phép chúng ta chỉ ra các đơn vị khác có liên quan, chúng tôi muốn nạp như khi đối tượng loại được lấy ra. Tính năng này được gọi là kết quả truy vấn Shaping, và cho phép chúng tôi giảm số lần chúng ta cần phải truy cập vào cơ sở dữ liệu để lấy tất cả các thông tin mà chúng tôi cần. Chúng tôi muốn trước lấy Album Genre chúng tôi lấy, vì vậy chúng tôi sẽ cập nhật truy vấn của chúng tôi bao gồm từ Genres.Include ("Albums") để chỉ ra rằng chúng tôi muốn album có liên quan cũng. Đây là hiệu quả hơn, vì nó sẽ lấy cả hai loại của chúng tôi và Album dữ liệu trong một yêu cầu cơ sở dữ liệu duy nhất. Với những lời giải thích trên đường đi, đây là cập nhật Browse hành động điều khiển của chúng tôi trông như thế nào: public ActionResult Browse(string genre) { // Retrieve Genre and its Associated Albums from database var genreModel = storeDB.Genres.Include("Albums") .Single(g => g.Name == genre); return View(genreModel); } Bây giờ chúng ta có thể cập nhật Xem Browse Store để hiển thị các album có sẵn trong mỗi loại. Mở mẫu xem (tìm thấy / Views / Store / Browse.cshtml) và thêm một danh sách liệt kê của Album như hình dưới đây. @model MvcMusicStore.Models.Genre @{ ViewBag.Title = "Browse"; } <h2>Browsing Genre: @Model.Name</h2> <ul> @foreach (var album in Model.Albums) { <li> @album.Title </li> } </ul> Chạy ứng dụng của chúng tôi và duyệt tới / Store / Duyệt thể loại = chương trình Jazz kết quả của chúng tôi hiện đang được lấy từ cơ sở dữ liệu, hiển thị tất cả các album trong loại được lựa chọn của chúng tôi.
  • 45. Edit by Nhiên IT ( www.eg.vnao.vn ) Chúng tôi sẽ làm cho các thay đổi tương tự Store / / Chi tiết của chúng tôi / [id] URL, và thay thế dữ liệu giả của chúng tôi với một truy vấn cơ sở dữ liệu mà tải một Album có ID phù hợp với giá trị tham số. public ActionResult Details(int id) { var album = storeDB.Albums.Find(id); return View(album); } Chạy ứng dụng của chúng tôi và duyệt tới / Store/Details/1 cho thấy kết quả của chúng tôi hiện nay đang được lấy từ cơ sở dữ liệu.
  • 46. Edit by Nhiên IT ( www.eg.vnao.vn ) Bây giờ cửa hàng trang Chi tiết của chúng tôi được thiết lập để hiển thị một album ID Album, cho phép cập nhậtDuyệt xem liên kết để xem chi tiết. Chúng tôi sẽ sử dụng Html.ActionLink, chính xác như chúng tôi đã liên kết từ Index các cửa hàng để Store Browse ở cuối của phần trước. Nguồn hoàn chỉnh cho xem Browse xuất hiện bên dưới @model MvcMusicStore.Models.Genre @{ ViewBag.Title = "Browse"; } <h2> Browsing Genre: @Model.Name </ h2> <ul> @foreach (var album in Model.Albums) { <li> @Html.ActionLink(album.Title,"Details", new {id = album.AlbumId}) </li> } </ ul> Chúng tôi bây giờ có thể để trình duyệt từ trang cửa hàng của chúng tôi đến một trang Thể loại, trong đó liệt kê các album có sẵn, và bằng cách nhấp vào một album, chúng ta có thể xem chi tiết cho album đó.
  • 47. Edit by Nhiên IT ( www.eg.vnao.vn ) 5.Edit Forms and Templating Trong chương trước, chúng tôi đã được tải dữ liệu từ cơ sở dữ liệu của chúng tôi và hiển thị nó. Trong chương này, chúng tôi cũng sẽ cho phép chỉnh sửa dữ liệu. Tạo StoreManagerController Chúng tôi sẽ bắt đầu bằng cách tạo ra một bộ điều khiển mới được gọi là StoreManagerController . Cho bộ điều khiển này, chúng ta sẽ được tận dụng giàn giáo các tính năng có sẵn trong MVC ASP.NET Update Tools 3. Thiết lập các tùy chọn cho hộp thoại Add điều khiển như hình dưới đây.
  • 48. Edit by Nhiên IT ( www.eg.vnao.vn ) Khi bạn nhấn chuột vào nút Add, bạn sẽ thấy rằng ASP.NET MVC 3 giàn giáo cơ chế hiện một số lượng tốt của công việc cho bạn:  Nó tạo ra StoreManagerController mới với một biến khung Entity địa phương  Nó cho biết thêm một thư mục StoreManager vào thư mục Views của dự án  Nó cho biết thêm Create.cshtml, Delete.cshtml, Details.cshtml, Edit.cshtml, và xem Index.cshtml, mạnh mẽ đánh máy cho lớp Album
  • 49. Edit by Nhiên IT ( www.eg.vnao.vn ) StoreManager lớp điều khiển mới này bao gồm CRUD (tạo, đọc, cập nhật, xóa) các hành động điều khiển mà biết làm thế nào để làm việc với các lớp mô hình Album và ngữ cảnh sử dụng Entity Framework để truy cập cơ sở dữ liệu của chúng tôi. Sửa đổi một Xem Scaffolded Điều quan trọng là phải nhớ rằng, trong khi mã này được tạo ra cho chúng ta, nó là tiêu chuẩn mã ASP.NET MVC, giống như chúng tôi đã viết suốt hướng dẫn này. Nó nhằm mục đích giúp bạn tiết kiệm thời gian bạn muốn chi tiêu vào việc viết mã điều khiển boilerplate và tạo ra các quan điểm mạnh mẽ đánh máy bằng tay, nhưng điều này không phải là loại mã được tạo ra, bạn có thể đã thấy mở đầu với cảnh báo thảm khốc trong ý kiến về việc làm thế nào bạn không được thay đổi mã. Đây là mã của bạn, và bạn đang dự kiến sẽ thay đổi nó. Vì vậy, hãy bắt đầu với một chỉnh sửa nhanh chóng để xem Index StoreManager (/ xem / StoreManager / Index.cshtml). Điểm này sẽ hiển thị một bảng trong đó liệt kê các album khác trong cửa hàng của chúng tôi với Edit / chi tiết / Xóa liên kết, và bao gồm các tài sản công cộng của Album. Chúng tôi sẽ loại bỏ các lĩnh vực AlbumArtUrl, vì nó không phải là rất hữu ích trong màn hình này. Trong phần <table> của mã xem, loại bỏ các yếu tố <th> và <td> xung quanh các tài liệu tham khảo AlbumArtUrl, như được chỉ ra bởi các đường đánh dấu dưới đây:
  • 50. Edit by Nhiên IT ( www.eg.vnao.vn ) <table> <tr> <th> Genre </th> <th> Artist </th> <th> Title </th> <th> Price </th> <th> AlbumArtUrl </th> <th></th> </tr> @foreach (var item in Model) { <tr> <td> @Html.DisplayFor(modelItem => item.Genre.Name) </td> <td> @Html.DisplayFor(modelItem => item.Artist.Name) </td> <td> @Html.DisplayFor(modelItem => item.Title) </td> <td> @Html.DisplayFor(modelItem => item.Price) </td> <td> @Html.DisplayFor(modelItem => item.AlbumArtUrl) </td> <td> @Html.ActionLink("Edit", "Edit", new { id=item.AlbumId }) | @Html.ActionLink("Details", "Details", new { id=item.AlbumId }) | @Html.ActionLink("Delete", "Delete", new { id=item.AlbumId }) </td> </tr> } </table> Mã xem thay đổi sẽ xuất hiện như sau: @model IEnumerable<MvcMusicStore.Models.Album> @{
  • 51. Edit by Nhiên IT ( www.eg.vnao.vn ) ViewBag.Title = "Index"; } <h2>Index</h2> <p> @Html.ActionLink("Create New", "Create") </p> <table> <tr> <th> Genre </th> <th> Artist </th> <th> Title </th> <th> Price </th> <th></th> </tr> @foreach (var item in Model) { <tr> <td> @Html.DisplayFor(modelItem => item.Genre.Name) </td> <td> @Html.DisplayFor(modelItem => item.Artist.Name) </td> <td> @Html.DisplayFor(modelItem => item.Title) </td> <td> @Html.DisplayFor(modelItem => item.Price) </td> <td> @Html.ActionLink("Edit", "Edit", new { id=item.AlbumId }) | @Html.ActionLink("Details", "Details", new { id=item.AlbumId }) | @Html.ActionLink("Delete", "Delete", new { id=item.AlbumId }) </td> </tr> } </table> Một cái nhìn đầu tiên tại Store Manager Bây giờ chạy các ứng dụng và trình duyệt / StoreManager /. Này hiển thị Index Store Manager, chúng tôi chỉ cần sửa đổi, hiển thị một danh sách các album khác trong cửa hàng với các liên kết Chỉnh sửa, chi tiết, và Delete.
  • 52. Edit by Nhiên IT ( www.eg.vnao.vn ) Nhấp vào liên kết Chỉnh sửa hiển thị một hình thức chỉnh sửa với các lĩnh vực Album, bao gồm Dropdowns cho loại và Artist.
  • 53. Edit by Nhiên IT ( www.eg.vnao.vn ) Nhấp vào "Back to List" liên kết ở phía dưới, sau đó bấm vào liên kết Details Album. Hiển thị thông tin chi tiết cho một Album cá nhân. Một lần nữa, bấm vào Trở lại danh sách liên kết, và sau đó nhấn vào một liên kết Xoá. Này sẽ hiển thị một hộp thoại xác nhận, hiển thị các chi tiết album và hỏi nếu chúng tôi chắc chắn chúng tôi muốn xóa nó.
  • 54. Edit by Nhiên IT ( www.eg.vnao.vn ) Nhấp vào nút Delete ở phía dưới sẽ xóa các album và đưa bạn trở lại trang Index, trong đó cho thấy trong album đã bị xóa. Chúng tôi không thực hiện với Store Manager, nhưng chúng tôi đã làm việc điều khiển và xem mã cho các hoạt động CRUD để bắt đầu từ. Nhìn vào mã Store điều khiển quản lý Controller Store Manager có chứa một số lượng tốt của các mã. Hãy cho đi qua này từ trên xuống dưới. Bộ điều khiển bao gồm một số tên miền không gian tiêu chuẩn cho một bộ điều khiển MVC, cũng như một tham chiếu đến không gian tên Mô hình của chúng tôi. Bộ điều khiển có một trường hợp riêng của MusicStoreEntities, được sử dụng bởi các hành động điều khiển để truy cập dữ liệu. using System; using System.Collections.Generic; using System.Data; using System.Data.Entity; using System.Linq; using System.Web; using System.Web.Mvc; using MvcMusicStore.Models; namespace MvcMusicStore.Controllers { public class StoreManagerController : Controller { private MusicStoreEntities db = new MusicStoreEntities(); Store Manager Index và chi tiết hành động
  • 55. Edit by Nhiên IT ( www.eg.vnao.vn ) Xem chỉ số lấy một danh sách các Album, bao gồm cả loại tham chiếu mỗi album và thông tin Artist, như chúng ta đã thấy trước đó khi làm việc trên phương pháp Browse Store. Xem Index theo các tài liệu tham khảo cho các đối tượng liên kết để nó có thể hiển thị tên Genre mỗi album và tên nghệ sĩ, do đó, bộ điều khiển hiệu quả và truy vấn thông tin này trong yêu cầu ban đầu. // // GET: /StoreManager/ public ViewResult Index() { var albums = db.Albums.Include(a => a.Genre).Include(a => a.Artist); return View(albums.ToList()); } Chi tiết hành động điều khiển Controller StoreManager hoạt động chính xác tương tự như hành động Store chi tiết điều khiển chúng tôi đã viết trước đây - nó truy vấn Album theo ID bằng cách sử dụng phương thức Find (), sau đó trả lại nó cho xem. // // GET: /StoreManager/Details/5 public ViewResult Details(int id) { Album album = db.Albums.Find(id); return View(album); } Hành động tạo ra phương pháp Tạo phương pháp hành động là một chút khác nhau từ những người chúng ta đã thấy cho đến nay, vì họ xử lý các hình thức đầu vào. Khi một người sử dụng đầu tiên thăm / StoreManager / Tạo / họ sẽ được hiển thị một hình thức trống rỗng. Trang HTML này sẽ chứa một yếu tố <form> có chứa các yếu tố đầu vào và các hộp thả xuống nơi họ có thể nhập các chi tiết của album. Sau khi người dùng điền vào các giá trị hình thức Album, họ có thể nhấn nút "Save" để gửi những thay đổi trở lại ứng dụng của chúng tôi để tiết kiệm trong cơ sở dữ liệu. Khi người dùng nhấn nút "lưu" <form> sẽ thực hiện một HTTP POST lại này để các StoreManager / / Tạo / URL và gửi các giá trị <form> như là một phần của POST-HTTP. ASP.NET MVC cho phép chúng ta dễ dàng chia logic của hai kịch bản này gọi URL bằng cách cho phép chúng tôi thực hiện hai riêng biệt "Tạo" phương pháp hành động trong lớp StoreManagerController của chúng tôi - một để xử lý ban đầu HTTP-GET duyệt này để các StoreManager / / Tạo / URL, và các khác để xử lý các HTTP POST trong những thay đổi trình. Chuyển thông tin ViewBag Xem bằng cách sử dụng Chúng tôi đã sử dụng ViewBag trước đó trong hướng dẫn này, nhưng đã không nói nhiều về nó. ViewBag cho phép chúng ta chuyển thông tin để xem mà không cần sử dụng một mô hình đối tượng mạnh mẽ đánh máy. Trong trường hợp này, chúng tôi Sửa HTTP-GET điều khiển hành động cần phải vượt qua cả một danh sách các thể loại và nghệ sĩ để hình thành để cư Dropdowns, và cách đơn giản nhất để làm điều đó là để trả lại như các mục ViewBag. ViewBag là một đối tượng năng động, có nghĩa là bạn có thể gõ ViewBag.Foo hoặc ViewBag.YourNameHere mà không cần viết mã để xác định những tài sản. Trong trường hợp này, mã điều khiển sử dụng ViewBag.GenreId và ViewBag.ArtistId để thả xuống các giá trị nộp cùng với mẫu đơn sẽ được GenreId và ArtistId, là tài sản Album họ sẽ được thiết lập. Những giá trị này thả xuống trở lại dưới hình thức bằng cách sử dụng các đối tượng SelectList, được xây dựng cho mục đích đó. Điều này được thực hiện bằng cách sử dụng mã như thế này:
  • 56. Edit by Nhiên IT ( www.eg.vnao.vn ) ViewBag.GenreId = new SelectList(db.Genres, "GenreId", "Name"); Như bạn có thể nhìn thấy từ mã phương pháp hành động, ba thông số đang được sử dụng để tạo ra các đối tượng này:  Danh sách các hạng mục trình đơn thả xuống sẽ được hiển thị. Lưu ý rằng đây không phải chỉ là một chuỗi - chúng ta sẽ đi qua một danh sách các thể loại.  Tham số tiếp theo được thông qua SelectList các giá trị được chọn. Này. SelectList biết làm thế nào trước chọn một mục trong danh sách Điều này sẽ dễ dàng hơn để hiểu khi chúng ta nhìn vào các hình thức Edit, là khá tương tự.  Tham số cuối cùng là các tài sản sẽ được hiển thị. Trong trường hợp này, điều này được chỉ ra rằng tài sản Genre.Name là những gì sẽ được hiển thị cho người dùng. Với ý nghĩ đó, sau đó, HTTP-GET Tạo hành động là khá đơn giản - SelectLists hai được thêm vào các ViewBag, và không có mô hình đối tượng được thông qua hình thức (vì nó đã không được tạo ra chưa). // // GET: /StoreManager/Create public ActionResult Create() { ViewBag.GenreId = new SelectList(db.Genres, "GenreId", "Name"); ViewBag.ArtistId = new SelectList(db.Artists, "ArtistId", "Name"); return View(); } Helpers HTML để hiển thị các Downs Drop Xem Create Kể từ khi chúng tôi đã nói chuyện về cách thả xuống giá trị được thông qua để xem, chúng ta hãy xem nhanh xem để xem làm thế nào những giá trị được hiển thị. Trong đoạn code xem (/ xem / StoreManager / Create.cshtml), bạn sẽ thấy cuộc gọi sau đây được thực hiện để hiển thị các loại thả xuống. Html.DropDownList ("GenreId", String.Empty) Điều này được biết đến như một HTML Helper - một phương pháp hữu ích, thực hiện một nhiệm vụ chung. Helpers HTML rất hữu ích trong việc giữ mã điểm của chúng tôi ngắn gọn và dễ đọc. Helper Html.DropDownList được cung cấp bởi ASP.NET MVC, nhưng như chúng ta sẽ thấy sau đó nó có thể tạo ra người giúp việc riêng của mình cho mã xem chúng tôi sẽ tái sử dụng trong ứng dụng của chúng tôi. Các cuộc gọi Html.DropDownList chỉ cần được nói với hai điều - nơi để có được danh sách để hiển thị, và những gì giá trị (nếu có) nên được chọn sẵn. Tham số đầu tiên, GenreId, cho DropDownList để tìm kiếm một giá trị có tên GenreId trong mô hình hoặc ViewBag. Tham số thứ hai được sử dụng để chỉ ra giá trị để hiển thị như ban đầu được lựa chọn trong danh sách thả xuống. Vì biểu mẫu này là một hình thức Create, không có giá trị được chọn trước và String.Empty được thông qua. Xử lý các giá trị mẫu văn Như chúng ta đã thảo luận trước đó, có hai phương pháp hành động kết hợp với mỗi hình thức. Đầu tiên xử lý các yêu cầu HTTP GET và hiển thị biểu mẫu. Thứ hai xử lý các yêu cầu HTTP POST, trong đó có chứa các giá trị biểu mẫu được gửi. Chú ý rằng điều khiển hành động có một HttpPost] thuộc tính, mà nói với ASP.NET MVC là nó chỉ cần đáp ứng các yêu cầu HTTP-POST.
  • 57. Edit by Nhiên IT ( www.eg.vnao.vn ) // // POST: /StoreManager/Create [HttpPost] public ActionResult Create(Album album) { if (ModelState.IsValid) { db.Albums.Add(album); db.SaveChanges(); return RedirectToAction("Index"); } ViewBag.GenreId = new SelectList(db.Genres, "GenreId", "Name", album.GenreId); ViewBag.ArtistId = new SelectList(db.Artists, "ArtistId", "Name", album.ArtistId); return View(album); } Hành động này có bốn trách nhiệm:  1. Đọc giá trị hình thức  2. Kiểm tra xem các giá trị hình thức vượt qua bất kỳ quy tắc xác nhận  3. Nếu hình thức trình là hợp lệ, lưu dữ liệu và hiển thị danh sách cập nhật  4. Nếu hình thức trình không hợp lệ, hiển thị lại các hình thức với các lỗi xác nhận Đọc giá trị hình thức với Binding mẫu Hành động điều khiển được xử lý một hình thức trình bao gồm giá trị cho GenreId và ArtistId (từ danh sách thả xuống) và các giá trị hộp văn bản Title, Giá, và AlbumArtUrl. Trong khi nó có thể truy cập trực tiếp các giá trị hình thức, một cách tiếp cận tốt hơn là sử dụng khả năng mô hình Binding được xây dựng vào ASP.NET MVC. Khi một hành động điều khiển một loại mô hình như một tham số, ASP.NET MVC sẽ cố gắng để cư trú một đối tượng của kiểu bằng cách sử dụng các yếu tố đầu vào hình thức (cũng như các tuyến đường và chuỗi truy vấn giá trị). Nó làm điều này bằng cách tìm kiếm các giá trị có tên phù hợp với tính chất của đối tượng mô hình, ví dụ như khi thiết lập giá trị GenreId đối tượng Album mới, có vẻ một đầu vào với GenreId tên. Khi bạn tạo ra quan điểm bằng cách sử dụng các phương pháp tiêu chuẩn trong ASP.NET MVC, các hình thức sẽ luôn luôn được trả lại bằng cách sử dụng tên tài sản như tên trường đầu vào, do đó, các tên trường sẽ chỉ phù hợp. Validating Model Mô hình này được xác nhận với một cuộc gọi đơn giản để ModelState.IsValid. Chúng tôi đã không được thêm bất kỳ quy tắc xác nhận vào lớp Album của chúng tôi - chúng tôi sẽ làm một chút - vì vậy ngay bây giờ việc kiểm tra này không có nhiều việc để làm. Điều quan trọng là việc kiểm tra này ModelStat.IsValid sẽ thích ứng với các quy tắc xác nhận chúng tôi đưa vào mô hình của chúng tôi, do đó, những thay đổi trong tương lai để quy tắc xác nhận sẽ không yêu cầu bất kỳ bản cập nhật mã hành động điều khiển. Tiết kiệm các giá trị submit Nếu hình thức trình đi xác nhận, đó là thời gian để lưu các giá trị cơ sở dữ liệu. Với Entity Framework, mà chỉ cần yêu cầu thêm các mô hình để thu Albums và gọi SaveChanges. db.Albums.Add(album); db.SaveChanges(); Entity Framework tạo ra các câu lệnh SQL thích hợp để vẫn tồn các giá trị. Sau khi lưu các dữ liệu, chúng tôi chuyển hướng trở lại danh sách các album, do đó chúng ta có thể thấy cập nhật của chúng
  • 58. Edit by Nhiên IT ( www.eg.vnao.vn ) tôi. Điều này được thực hiện bằng cách trở về RedirectToAction với tên của hành động điều khiển chúng ta muốn hiển thị. Trong trường hợp này, đó là phương pháp Index. Hiển thị đệ trình không hợp lệ với các lỗi Validation Trong trường hợp đầu vào không hợp lệ, các giá trị thả xuống được thêm vào các ViewBag (như trong trường hợp HTTP-GET) và mô hình các giá trị ràng buộc được thông qua trở lại xem để hiển thị. Lỗi xác nhận sẽ tự động được hiển thị bằng cách sử dụng the@Html.ValidationMessageFor HTML Helper. Kiểm tra mẫu Create Để kiểm tra này ra, chạy các ứng dụng và duyệt / StoreManager / Tạo / - điều này sẽ cho bạn thấy hình thức trống được trả về bởi phương pháp StoreController HTTP-GET Create. Điền vào một số giá trị và click vào nút Create để gửi biểu mẫu. Xử lý chỉnh sửa Cặp đôi hành động Edit (HTTP-GET và HTTP POST) là rất tương tự như các phương pháp hành động Create chúng tôi chỉ nhìn. Kể từ khi kịch bản chỉnh sửa liên quan đến làm việc với một album hiện có, Edit HTTP-GET tải phương pháp Album dựa trên các tham số "id", thông qua tại thông qua các tuyến đường. Mã này để lấy một album của ALBUMID giống như trước đó chúng tôi đã nhìn vào trong hành động chi tiết điều khiển. Với phương pháp Create / HTTP GET, thả xuống giá trị được trả về thông qua ViewBag. Điều này cho phép chúng tôi để trở về một Album như là đối tượng mô hình của chúng tôi để xem (được gõ vào các lớp Album) trong khi đi qua các dữ liệu bổ sung (ví dụ như một danh sách các thể loại) thông qua các ViewBag.
  • 59. Edit by Nhiên IT ( www.eg.vnao.vn ) // // GET: /StoreManager/Edit/5 public ActionResult Edit(int id) { Album album = db.Albums.Find(id); ViewBag.GenreId = new SelectList(db.Genres, "GenreId", "Name", album.GenreId); ViewBag.ArtistId = new SelectList(db.Artists, "ArtistId", "Name", album.ArtistId); return View(album); } Sửa HTTP-POST hành động rất giống với các hành động HTTP-POST Create. Sự khác biệt duy nhất là thay vì thêm một album mới vào bộ sưu tập db.Albums, chúng tôi đang tìm kiếm các trường hợp hiện tại của Album sử dụng db.Entry (album) và thiết lập trạng thái của nó để thay đổi. Này cho Entity Framework rằng chúng ta đang sửa đổi một album hiện có như trái ngược với tạo một hình mới. // // POST: /StoreManager/Edit/5 [HttpPost] public ActionResult Edit(Album album) { if (ModelState.IsValid) { db.Entry(album).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Index"); } ViewBag.GenreId = new SelectList(db.Genres, "GenreId", "Name", album.GenreId); ViewBag.ArtistId = new SelectList(db.Artists, "ArtistId", "Name", album.ArtistId); return View(album); } Chúng ta có thể kiểm tra điều này bằng cách chạy các ứng dụng và trình duyệt / StoreManger /, sau đó nhấp vào liên kết Chỉnh sửa cho một album. Này hiển thị các hình thức Chỉnh sửa hiển thị theo phương pháp HTTP-GET Sửa. Điền vào một số giá trị và nhấp vào nút Save.
  • 60. Edit by Nhiên IT ( www.eg.vnao.vn ) Điều này bài viết dưới hình thức lưu các giá trị, và trả lại cho chúng tôi vào danh sách Album, cho thấy rằng các giá trị đã được cập nhật. Xử lý xóa Xóa sau cùng một khuôn mẫu như chỉnh sửa và tạo, bằng cách sử dụng một trong những hành động điều khiển để hiển thị các hình thức xác nhận, và một bộ điều khiển hành động để xử lý các hình thức trình. HTTP-GET Xóa điều khiển hành động là chính xác giống như quản lý trước hành động điều khiển lưu trữ chi tiết của chúng tôi. // // GET: /StoreManager/Delete/5 public ActionResult Delete(int id) { Album album = db.Albums.Find(id); return View(album); } Chúng tôi hiển thị một hình thức mạnh mẽ đánh máy một loại Album, bằng cách sử dụng các mẫu Xóa nội dung xem.
  • 61. Edit by Nhiên IT ( www.eg.vnao.vn ) Các mẫu Xóa thấy tất cả các lĩnh vực cho mô hình, nhưng chúng ta có thể đơn giản hóa giảm khá một chút. Thay đổi mã xem trong / Views / StoreManager / Delete.cshtml sau. @model MvcMusicStore.Models.Album @{ ViewBag.Title = "Delete"; } <h2>Delete Confirmation</h2> <p>Are you sure you want to delete the album titled <strong>@Model.Title</strong>? </p> @using (Html.BeginForm()) { <p> <input type="submit" value="Delete" /> </p> <p> @Html.ActionLink("Back to List", "Index") </p> } Này sẽ hiển thị một xác nhận Xóa đơn giản.
  • 62. Edit by Nhiên IT ( www.eg.vnao.vn ) Nhấp vào nút Delete gây ra các hình thức được gửi trở lại cho máy chủ, thực hiện các hành động DeleteConfirmed. // // POST: /StoreManager/Delete/5 [HttpPost, ActionName("Delete")] public ActionResult DeleteConfirmed(int id) { Album album = db.Albums.Find(id); db.Albums.Remove(album); db.SaveChanges(); return RedirectToAction("Index"); } HTTP POST Xóa điều khiển hành động của chúng tôi có những hành động sau đây:  1. Tải các Album của ID  2. Xóa nó album và lưu thay đổi  3. Chuyển hướng đến chỉ số này, cho thấy Album đã được gỡ bỏ khỏi danh sách Để kiểm tra, chạy ứng dụng và duyệt / StoreManager. Chọn một album từ danh sách và nhấp vào liên kết Xoá.
  • 63. Edit by Nhiên IT ( www.eg.vnao.vn ) Này sẽ hiển thị màn hình xác nhận Xóa của chúng tôi. Nhấp vào nút Delete loại bỏ các album và trả về trang Store Index Manager, trong đó cho thấy rằng album đã bị xóa.
  • 64. Edit by Nhiên IT ( www.eg.vnao.vn ) Sử dụng một người trợ giúp HTML tùy chỉnh để truncate văn bản Chúng tôi đã có một vấn đề tiềm năng với trang Index quản lý cửa hàng của chúng tôi. Tiêu đề Album của chúng tôi và các thuộc tính Name Artist cả hai có thể đủ dài rằng họ có thể ném ra định dạng bảng của chúng tôi. Chúng tôi sẽ tạo ra một người trợ giúp HTML tùy chỉnh để cho phép chúng ta dễ dàng cắt những điều này và các tài sản khác xem của chúng tôi.
  • 65. Edit by Nhiên IT ( www.eg.vnao.vn ) Cú pháp helper @ Razor đã làm cho nó khá dễ dàng để tạo ra các chức năng trợ giúp của riêng bạn để sử dụng trong các quan điểm của bạn. Mở / xem / StoreManager / Index.cshtml xem và thêm mã sau đây trực tiếp sau khi dòng mô hình @. @helper Truncate(string input, int length) { if (input.Length <= length) { @input } else { @input.Substring(0, length)<text>...</text> } }
  • 66. Edit by Nhiên IT ( www.eg.vnao.vn ) Phương pháp này helper phải mất một chuỗi và chiều dài tối đa cho phép. Nếu văn bản được cung cấp là ngắn hơn so với chiều dài quy định, helper kết quả đầu ra như-là. Nếu lâu hơn nữa, sau đó nó cắt các văn bản và làm cho "..." cho phần còn lại. Bây giờ chúng ta có thể sử dụng helper Cắt ngắn của chúng tôi để đảm bảo rằng cả Tiêu đề Album và các thuộc tính Name Artist ít hơn 25 ký tự. Mã nhìn đầy đủ bằng cách sử dụng helper Truncate mới của chúng tôi xuất hiện bên dưới. @model IEnumerable<MvcMusicStore.Models.Album> @helper Truncate(string input, int length) { if (input.Length <= length) { @input } else { @input.Substring(0, length)<text>...</text> } } @{ ViewBag.Title = "Index"; } <h2>Index</h2> <p> @Html.ActionLink("Create New", "Create") </p> <table> <tr> <th> Genre </th> <th> Artist </th> <th> Title </th> <th> Price </th> <th></th> </tr> @foreach (var item in Model) { <tr> <td> @Html.DisplayFor(modelItem => item.Genre.Name) </td> <td> @Truncate(item.Artist.Name, 25) </td> <td> @Truncate(item.Title, 25) </td>
  • 67. Edit by Nhiên IT ( www.eg.vnao.vn ) <td> @Html.DisplayFor(modelItem => item.Price) </td> <td> @Html.ActionLink("Edit", "Edit", new { id=item.AlbumId }) | @Html.ActionLink("Details", "Details", new { id=item.AlbumId }) | @Html.ActionLink("Delete", "Delete", new { id=item.AlbumId }) </td> </tr> } </table> Bây giờ khi chúng ta duyệt URL / StoreManager /, các album và các chức danh được lưu giữ dưới độ dài tối đa của chúng tôi
  • 68. Edit by Nhiên IT ( www.eg.vnao.vn ) Lưu ý: Điều này cho thấy trường hợp đơn giản của việc tạo ra và sử dụng một người trợ giúp trong một giao diện.Để tìm hiểu thêm về việc tạo ra những người giúp đỡ mà bạn có thể sử dụng trong trang web của bạn, xem bài đăng blog của tôi: http://bit.ly/mvc3-helper-options 6.Using Data Annotations for Model Validation Chúng tôi có một vấn đề lớn với Tạo và chỉnh sửa các hình thức của chúng tôi: họ không làm bất kỳ xác nhận.Chúng ta có thể làm những việc như để lại các trường bắt buộc trống hoặc loại thư trong lĩnh vực giá, và các lỗi đầu tiên chúng ta sẽ thấy là từ cơ sở dữ liệu. Chúng ta có thể dễ dàng thêm xác nhận để ứng dụng của chúng tôi bằng cách thêm các chú thích dữ liệu đến các lớp học mô hình của chúng tôi. Dữ liệu Chú thích cho phép chúng tôi để mô tả các quy tắc chúng ta muốn áp dụng để tính mô hình của chúng tôi, và ASP.NET MVC sẽ chăm sóc thực thi và hiển thị thông điệp phù hợp cho người dùng của chúng tôi. Thêm Validation Mẫu Album của chúng tôi Chúng tôi sẽ sử dụng các thuộc tính dữ liệu chú thích sau đây:  Yêu cầu - Chỉ ra rằng bất động sản là một lĩnh vực cần thiết  DisplayName - Xác định văn bản chúng tôi muốn được sử dụng vào các lĩnh vực hình thức và tin nhắn xác nhận  StringLength - Xác định chiều dài tối đa cho một lĩnh vực chuỗi  Phạm vi - Cung cấp cho một giá trị tối đa và tối thiểu đối với một số lĩnh vực  Bind - Danh sách các trường để loại trừ hoặc đưa khi ràng buộc các giá trị tham số hoặc hình thức tính mô hình  ScaffoldColumn - Cho phép ẩn các lĩnh vực từ các hình thức biên tập viên Lưu ý: Để biết thêm thông tin về Validation mẫu bằng cách sử dụng các thuộc tính chú thích dữ liệu, xem tài liệu MSDN tại http://go.microsoft.com/fwlink/?LinkId=159063 Mở lớp Album và thêm dòng sau bằng cách sử dụng báo cáo để đầu. using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.Web.Mvc; Tiếp theo, cập nhật các tài sản thêm màn hình hiển thị và xác nhận thuộc tính như hình dưới đây. namespace MvcMusicStore.Models { [Bind(Exclude = "AlbumId")] public class Album { [ScaffoldColumn(false)] public int AlbumId { get; set; } [DisplayName("Genre")] public int GenreId { get; set; } [DisplayName("Artist")] public int ArtistId { get; set; }
  • 69. Edit by Nhiên IT ( www.eg.vnao.vn ) [Required(ErrorMessage = "An Album Title is required")] [StringLength(160)] public string Title { get; set; } [Required(ErrorMessage = "Price is required")] [Range(0.01, 100.00, ErrorMessage = "Price must be between 0.01 and 100.00")] public decimal Price { get; set; } [DisplayName("Album Art URL")] [StringLength(1024)] public string AlbumArtUrl { get; set; } public virtual Genre Genre { get; set; } public virtual Artist Artist { get; set; } } } Trong khi chúng tôi đang ở đó, chúng tôi cũng đã thay đổi loại và Artist tài sản ảo. Điều này cho phép Entity Framework để lười biếng tải chúng khi cần thiết. public virtual Genre Genre { get; set; } public virtual Artist Artist { get; set; } Sau đó có thêm các thuộc tính để mô hình Album của chúng tôi, Tạo và chỉnh sửa màn hình ngay lập tức bắt đầu xác nhận lĩnh vực, bằng cách sử dụng tên hiển thị chúng tôi đã chọn (ví dụ: Album Art Url thay vì AlbumArtUrl). Chạy ứng dụng và trình duyệt / StoreManager / Tạo.
  • 70. Edit by Nhiên IT ( www.eg.vnao.vn ) Tiếp theo, chúng tôi sẽ phá vỡ một số quy tắc xác nhận. Nhập giá từ 0 và bỏ trống Tiêu đề. Khi chúng ta click vào nút Create, chúng ta sẽ thấy form hiển thị với các thông báo lỗi xác nhận cho thấy các trường không đáp ứng các quy tắc xác nhận chúng tôi đã xác định.
  • 71. Edit by Nhiên IT ( www.eg.vnao.vn ) Kiểm tra Validation Client-Side Server-side xác nhận là rất quan trọng từ một quan điểm ứng dụng, bởi vì người dùng có thể phá vỡ phía máy khách xác nhận. Tuy nhiên, các hình thức trang web mà chỉ thực hiện phía máy chủ xác nhận hiện ba vấn đề quan trọng.  1. Người sử dụng đã phải chờ đợi cho biểu mẫu được đăng, xác nhận trên máy chủ, và đáp ứng được gửi đến trình duyệt của họ.  2. Người dùng không nhận được thông tin phản hồi ngay lập tức khi họ sửa chữa một lĩnh vực để nó vượt qua các quy tắc xác nhận.  3. Chúng tôi đang lãng phí tài nguyên máy chủ để thực hiện logic xác nhận thay vì tận dụng trình duyệt của người dùng. May mắn thay, ASP.NET MVC 3 giàn giáo mẫu có xác nhận phía máy khách được xây dựng trong, không cần công việc bổ sung nào. Gõ một chữ cái trong lĩnh vực Tiêu đề đáp ứng các yêu cầu xác nhận, do đó, các thông báo xác nhận được ngay lập tức gỡ bỏ.
  • 72. Edit by Nhiên IT ( www.eg.vnao.vn ) 7.Membership and Authorization Bộ điều khiển quản lý cửa hàng của chúng tôi hiện đang truy cập vào bất cứ ai truy cập vào trang web của chúng tôi. Hãy thay đổi điều này để hạn chế cho phép các quản trị viên trang web. Thêm AccountController Views Một sự khác biệt giữa ASP.NET MVC đầy đủ 3 mẫu ứng dụng Web và Web ASP.NET MVC 3 rỗng ứng dụng mẫu là mẫu sản phẩm nào không bao gồm một điều khiển tài khoản. Chúng tôi sẽ thêm một điều khiển tài khoản bằng cách sao chép một vài tập tin từ một ứng dụng ASP.NET MVC mới được tạo ra từ ASP.NET MVC đầy đủ 3 mẫu ứng dụng Web. Tạo một ứng dụng ASP.NET MVC mới bằng cách sử dụng đầy đủ các ASP.NET MVC 3 mẫu ứng dụng Web và sao chép các tập tin sau đây vào cùng một thư mục trong dự án của chúng tôi: 1. Sao chép AccountController.cs trong thư mục Controllers 2. Sao chép AccountModels trong thư mục Mô hình 3. Tạo một thư mục Tài khoản bên trong thư mục Lần đọc và sao chép tất cả bốn lượt xem trong
  • 73. Edit by Nhiên IT ( www.eg.vnao.vn ) Thay đổi không gian tên cho các điều khiển và các lớp học mẫu để họ bắt đầu với MvcMusicStore. Lớp AccountController nên sử dụng tên miền không gian MvcMusicStore.Controllers, và lớp AccountModels nên sử dụng tên miền không gian MvcMusicStore.Models. Lưu ý: Những tập tin này cũng có sẵn trong tải về MvcMusicStore-Assets.zip từ đó chúng ta sao chép các tập tin thiết kế trang web của chúng tôi tại đầu của hướng dẫn. Các tập tin thành viên được đặt trong thư mục Mã. Các giải pháp cập nhật như sau: Thêm một tài hành chính với các trang web cấu hình của ASP.NET Trước khi chúng tôi yêu cầu ủy quyền trong trang web của chúng tôi, chúng tôi sẽ cần phải tạo ra một người dùng có quyền truy cập. Cách dễ nhất để tạo một người dùng là sử dụng các trang web được xây dựng trong cấu hình ASP.NET. Khởi động trang web cấu hình ASP.NET bằng cách nhấn vào sau biểu tượng trong Solution Explorer. Này sẽ khởi chạy một trang web cấu hình. Nhấp vào tab Security trên màn hình chủ, sau đó nhấp vào liên kết "Enable vai trò" ở trung tâm của màn hình.
  • 74. Edit by Nhiên IT ( www.eg.vnao.vn ) Nhấp vào liên kết "Tạo hoặc Quản lý vai trò".
  • 75. Edit by Nhiên IT ( www.eg.vnao.vn ) Nhập "Administrator" như tên vai trò và nhấn nút Add Role. Nhấn nút Back, sau đó nhấn vào liên kết người dùng Create ở phía bên trái.
  • 76. Edit by Nhiên IT ( www.eg.vnao.vn ) Điền vào các lĩnh vực thông tin người dùng bên trái bằng cách sử dụng các thông tin sau: Lĩnh vực Giá trị Tên người dùng Quản trị viên Mật khẩu password123! Xác nhận mật khẩu password123! E-mail (Bất kỳ địa chỉ e-mail sẽ làm việc) Câu hỏi bảo mật (Bất cứ điều gì bạn muốn) An ninh trả lời (Bất cứ điều gì bạn muốn) Lưu ý: Bạn tất nhiên có thể sử dụng bất kỳ mật khẩu bạn muốn. Các mật khẩu trên được hiển thị như là một ví dụ, và được giả định trong các diễn đàn hỗ trợ trên CodePlex. Thiết lập bảo mật mật khẩu mặc định yêu cầu một mật khẩu mà là 7 ký tự và chứa một ký tự chữ và số không.
  • 77. Edit by Nhiên IT ( www.eg.vnao.vn ) Chọn vai trò quản trị cho người dùng này, và nhấn vào nút Create User. Tại thời điểm này, bạn sẽ thấy một thông báo chỉ ra rằng người sử dụng đã được tạo ra thành công.
  • 78. Edit by Nhiên IT ( www.eg.vnao.vn ) Bây giờ bạn có thể đóng cửa sổ trình duyệt. Dựa trên vai trò ủy quyền Bây giờ chúng ta có thể hạn chế quyền truy cập vào StoreManagerController bằng cách sử dụng [Duyệt] thuộc tính, quy định cụ thể mà người sử dụng phải có vai trò quản trị để truy cập vào bất kỳ hành động điều khiển trong lớp. [Authorize(Roles = "Administrator")] public class StoreManagerController : Controller { // Controller code here } Lưu ý: [Duyệt] thuộc tính có thể được đặt trên các phương pháp hành động cụ thể cũng như ở cấp lớp điều khiển. Bây giờ duyệt đến / StoreManager Vào hộp thoại: Sau khi đăng nhập với tài khoản quản trị mới của chúng tôi, chúng tôi có thể đi vào Album Chỉnh sửa màn hình như trước. 8.Shopping Cart with Ajax Updates Chúng tôi sẽ cho phép người dùng để đặt album trong giỏ hàng của họ mà không cần đăng ký, nhưng họ sẽ cần phải đăng ký như là khách để hoàn tất thanh toán. Quá trình mua sắm và thanh toán sẽ được tách thành hai bộ điều khiển: điều khiển Giỏ hàng cho phép ẩn danh thêm các mục vào giỏ
  • 79. Edit by Nhiên IT ( www.eg.vnao.vn ) hàng, và điều khiển Checkout đó xử lý các quy trình kiểm tra. Chúng tôi sẽ bắt đầu với Giỏ hàng trong phần này, sau đó xây dựng quy trình kiểm tra trong phần sau. Thêm vào giỏ hàng, đặt hàng, và các lớp mô hình OrderDetail Giỏ hàng của chúng tôi và các quá trình Checkout sẽ làm cho việc sử dụng của một số các lớp học mới. Kích chuột phải vào thư mục Models và thêm một lớp hàng (Cart.cs) với mã sau đây. using System.ComponentModel.DataAnnotations; namespace MvcMusicStore.Models { public class Cart { [Key] public int RecordId { get; set; } public string CartId { get; set; } public int AlbumId { get; set; } public int Count { get; set; } public System.DateTime DateCreated { get; set; } public virtual Album Album { get; set; } } } Lớp này là khá tương tự như những người khác chúng tôi đã sử dụng cho đến nay, với ngoại lệ của các thuộc tính [Key] tài sản recordID. Mục của chúng tôi giỏ hàng sẽ có một định danh chuỗi tên là CartID để cho phép mua sắm vô danh, nhưng bàn bao gồm một phím số nguyên chính được đặt tên recordID. Theo quy ước, Entity Framework Mã-First hy vọng rằng các khóa chính cho một bảng tên là giỏ hàng sẽ hoặc là CartId hoặc ID, nhưng chúng ta có thể dễ dàng ghi đè lên rằng thông qua các chú thích hoặc mã nếu chúng ta muốn. Đây là một ví dụ về làm thế nào chúng ta có thể sử dụng quy ước đơn giản trong Entity Framework Code-Đầu tiên khi họ phù hợp với chúng tôi, nhưng chúng tôi không hạn chế bởi họ khi họ không. Tiếp theo, thêm một lớp Order (Order.cs) với mã sau đây. using System.Collections.Generic; namespace MvcMusicStore.Models { public partial class Order { public int OrderId { get; set; } public string Username { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string Address { get; set; } public string City { get; set; } public string State { get; set; } public string PostalCode { get; set; } public string Country { get; set; } public string Phone { get; set; } public string Email { get; set; } public decimal Total { get; set; }