Trong phần này, bạn sẽ tạo một lớp MoviesController mới và viết code để truy xuất dữ liệu movie và hiển thị nó trong trình duyệt bằng cách sử dụng view template. Việt sáng club sẽ hướng dẫn cách xây dựng ứng dụng trước khi tiếp tục bước tiếp theo. Nếu bạn không xây dựng ứng dụng, bạn sẽ gặp lỗi khi thêm controller.

Trong Solution Explorer, bấm chuột phải vào Controller folder và sau đó bấm Add rồi bấm Controller.

Trong hộp thoại Add Scaffold, bấm chọn MVC 5 Controller with viewsusing Entity Framework sau đó bấm Add.

  • Chọn Movie (MvcMovie.Models) cho lớp Model.
  • Chọn MovieDBContext (MvcMovie.Models) cho lớp Data context.
  • Đối với tên Controller, nhập MoviesController.

Hình ảnh bên dưới hiển thị hộp thoại đã hoàn thành

Nhấp vào Add. (Nếu gặp lỗi, có thể bạn không xây dựng ứng dụng trước khi bắt đầu thêm controller.) Visual Studio tạo các tệp và thư mục sau:

  • Tệp MoviesController.cs trong thư mục Controller.
  • Thư mục Views \ Movies.
  • Tạo.cshtml, Delete.cshtml, Details.cshtml, Edit.cshtml và Index.cshtml trong thư mục Views \ Movies mới.

Visual Studio tự động tạo CRUD (tạo, đọc, cập nhật và xóa) các phương thức hành động và các view cho bạn (việc tạo tự động các phương thức hành động CRUD và các view được gọi là scaffolding hay giàn khung). Bây giờ bạn có một ứng dụng web đầy đủ chức năng cho phép bạn tạo, liệt kê, chỉnh sửa và xóa các mục movie.

Chạy ứng dụng và nhấp vào liên kết Movie MVC (hoặc trình duyệt đến Movie controller bằng cách thêm / Movies vào URL trong thanh địa chỉ của trình duyệt của bạn). Vì ứng dụng dựa vào định tuyến mặc định (được định nghĩa trong tệp App_Start\RouteConfig.cs), yêu cầu trình duyệt http://localhost: xxxxx/Movies được chuyển đến phương thức hành động mặc định Index của controller Movie. Nói cách khác, yêu cầu trình duyệt http: //localhost: xxxxx/Movies có hiệu quả giống với yêu cầu của trình duyệt http://localhost: xxxxx/Movies/Index. Kết quả là một danh sách movie trống, vì bạn chưa thêm bất kỳ movie nào.

Tạo một Movie

Chọn liên kết Create New. Nhập một số chi tiết về movie và sau đó nhấp vào nút Create.

Chú thích

Bạn không thể nhập dấu thập phân hoặc dấu phẩy trong trường Price. Để hỗ trợ xác thực jQuery cho miền địa phương không phải tiếng Anh mà sử dụng dấu phẩy (“,&rdquo cho dấu thập phân và định dạng ngày không phải tiếng Anh, bạn phải bao gồm tệp globalize.js và cultures/ globalize.cultures.js (từ https://github.com/jquery/globalize) và JavaScript để sử dụng Globalize.parseFloat. Bây giờ, chỉ cần nhập số nguyên như 10.

Nhấp vào nút Create làm cho biểu mẫu được đưa lên máy chủ, nơi thông tin phim được lưu trong cơ sở dữ liệu. Sau đó, bạn được chuyển hướng đến URL/Movie, nơi bạn có thể xem movie mới được tạo trong danh sách.

Tạo một vài mục movie nữa. Hãy thử các liên kết EditDetail và Delete, tất cả đều hoạt động.

Kiểm tra code đã được tạo

Mở tệp Controllers\MoviesController.cs và kiểm tra phương thức Index đã tạo. Một phần của movie controller với phương pháp Index được hiển thị bên dưới:


public class MoviesController : Controller
{
     private MovieDBContext db = new MovieDBContext();

     // GET: /Movies/
     public ActionResult Index()
     {
          return View(db.Movies.ToList());
     }
}

Yêu cầu tới Movies controller  trả về tất cả các mục nhập trong bảng Movie và sau đó chuyển kết quả đến giao diện Inndex. Dòng sau từ lớp MoviesController sẽ khởi tạo movie database context, như được mô tả trước đây. Bạn có thể sử dụng cơ sở dữ liệu này để truy vấn, chỉnh sửa và xóa các movie.

private MovieDBContext db = new MovieDBContext();

Các Model được đánh dấu và từ khóa @model

Trước đó trong hướng dẫn này, bạn đã thấy cách controller có thể truyền dữ liệu hoặc các đối tượng đến một view template bằng cách sử dụng đối tượng ViewBag. ViewBag là một đối tượng năng động, cung cấp một cách thuận tiện để truyền thông tin tới một view.

MVC cũng cung cấp khả năng truyền các đối tượng được đánh dấu vào một view template. Cách tiếp cận này cho phép kiểm tra thời gian biên dịch code của bạn tốt hơn và IntelliSense phong phú hơn trong trình soạn thảo Visual Studio. Cơ chế scaffolding trong Visual Studio sử dụng phương pháp tiếp cận này (có nghĩa là đi qua một model được đánh dấu) với lớp MoviesController và xem các template khi nó đã tạo ra các phương thức và các view.Trong tệp Controllers\MoviesController.cs kiểm tra phương thức Details được tạo ra. Phương thức Details được hiển thị bên dưới.

public ActionResult Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Movie movie = db.Movies.Find(id);
if (movie == null)
{
return HttpNotFound();
}
return View(movie);
}

Tham số id thường được truyền dưới dạng dữ liệu đường dẫn, ví dụ http: //localhost: 1234/movies / details/1 sẽ đặt controller thành movie controller, hành động Detail và id thành 1. Bạn cũng có thể chuyển vào id với chuỗi truy vấn như sau:

http: // localhost: 1234 / phim / chi tiết? id = 1

Nếu một Movie được tìm thấy, một thể hiện của các Movie model sẽ được chuyển đến Details view

return View(movie);

Kiểm tra nội dung của tệp Views\Movies\Details.cshtml

@model MvcMovie.Models.Movie

@{
ViewBag.Title = "Details";
}

<h2>Details</h2>

<div>
<h4>Movie</h4>
<hr />
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.Title)
</dt>
@*Markup omitted for clarity.*@
</dl>
</div>
<p>
@Html.ActionLink("Edit", "Edit", new { id = Model.ID }) |
@Html.ActionLink("Back to List", "Index")
</p>

Bằng cách bao gồm câu lệnh @model ở đầu tệp view template, bạn có thể chỉ định loại đối tượng mà view mong muốn. Khi bạn tạo movie controller, Visual Studio tự động bao gồm câu lệnh @model sau vào đầu tệp Details.cshtml:

@model MvcMovie.Models.Movie

Chỉ thị @model này cho phép bạn truy cập vào movie mà controller chuyển đến view bằng cách sử dụng một đối tượng Model được đánh dấu. Ví dụ, trong Details.cshtml template, code sẽ chuyển từng trường movie tới DisplayNameFor và DisplayFor HTML Helpers với đối tượng typed Model. Các phương thức Create và Edit cũng như các view template cũng truyền một đối tượng movie model.

Kiểm tra Index.cshtml và phương thức Index trong tệp MoviesController.cs. Lưu ý cách tạo ra một đối tượng List khi nó gọi phương thức helper View trong phương thức hành động Index. Đoạn code sau chuyển danh sách các Movie này từ phương thức hành động Index sang view:

public ActionResult Index()
{
return View(db.Movies.ToList());
}

Khi bạn tạo movie controller, Visual Studio tự động bao gồm câu lệnh @model vào đầu tệp Index.cshtml:

@model IEnumerable<MvcMovie.Models.Movie>

Chỉ thị @model này cho phép bạn truy cập vào danh sách các movie mà controller truyền vào view bằng cách sử dụng một đối tượng Model được đánh dấu. Ví dụ, trong template Index.cshtml, đoạn code lặp qua các movie bằng cách thực hiện một tuyên bố foreach trên đối tượng Model được đánh dấu:

@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Title)
</td>
<td>
@Html.DisplayFor(modelItem => item.ReleaseDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.Genre)
</td>
<td>
@Html.DisplayFor(modelItem => item.Price)
</td>
<th>
@Html.DisplayFor(modelItem => item.Rating)
</th>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
@Html.ActionLink("Details", "Details", new { id=item.ID })  |
@Html.ActionLink("Delete", "Delete", new { id=item.ID })
</td>
</tr>
}

Vì đối tượng Model được đánh dấu (như một đối tượng IEnumerable <Movie>, mỗi item trong vòng lặp được đánh dấu thành Movie. Trong số các lợi ích khác, điều này có nghĩa là bạn nhận được kiểm tra thời gian biên dịch code và hỗ trợ đầy đủ của IntelliSense trong trình soạn thảo code:

Làm việc với SQL Server LocalDB

Entity Framework Code First phát hiện thấy chuỗi kết nối cơ sở dữ liệu đã được cung cấp được trỏ đến cơ sở dữ liệu Movies chưa tồn tại, vì vậy Code First đã tạo cơ sở dữ liệu tự động. Bạn có thể xác minh rằng nó đã được tạo bằng cách tìm trong thư mục App_Data. Nếu bạn không thấy tệp Movies.mdf, hãy nhấp vào nút Show All Files trong thanh công cụ Solution Explorer, nhấp vào nút Refresh và sau đó mở rộng thư mục App_Data.

Nhấp đúp vào Movies.mdf để mở SERVER EXPLORER, sau đó mở rộng thư mục Tables để xem bảng Movies. Lưu ý biểu tượng khóa bên cạnh ID. Theo mặc định, EF sẽ tạo một thuộc tính được đặt tên là khóa chính. Để biết thêm thông tin về EF và MVC, hãy xem hướng dẫn về MVC và EF.

Nhấp chuột phải vào bảng Movies và chọn Show Table Data để xem dữ liệu bạn đã tạo.

Nhấn chuột phải vào bảng Movies và chọn Open Table Definition để xem cấu trúc bảng mà Entity Framework Code First được tạo cho bạn.

Lưu ý cách lược đồ của bảng Movies ánh xạ tới lớp Movie bạn đã tạo trước đó. Entity Framework Code First tự động tạo lược đồ này cho bạn dựa trên lớp Movie của bạn.

Khi bạn hoàn tất, hãy đóng kết nối bằng cách kích chuột phải vào MovieDBContext và chọn Close Connection. (Nếu bạn không đóng kết nối, bạn có thể gặp lỗi trong lần chạy dự án tiếp theo).

Bây giờ bạn có một cơ sở dữ liệu và các trang để hiển thị, chỉnh sửa, cập nhật và xóa dữ liệu. Trong hướng dẫn tiếp theo, chúng ta sẽ kiểm tra phần còn lại của scaffolded code và thêm một phương thức SearchIndex và SearchIndex view cho phép bạn tìm kiếm các movie trong cơ sở dữ liệu này. Để biết thêm thông tin về cách sử dụng Entity Framework với MVC, hãy xem thêm thông tin tại https://vietsang.club/category/asp-net-core/#.XAjTxR83vio