Tạo ứng dụng ASP.NET MVC 3
Bài viết được cập nhật từ 2:08:33 CH, 18 Tháng Tám 2012 bởi tumivn
Đây là phần đầu của hướng dẫn nhằm giúp bạn xây dựng một ứng dụng ASP.NET MVC có chức năng
quản lý danh sách các việc cần làm của bạn.
Bạn sẽ làm những gì?
Bạn sẽ cùng tôi xây dựng một ứng dụng quản lý sổ tay công việc cần làm. Ứng dụng này hỗ trợ tạo,
điều chỉnh, xóa và liệt kê danh sách các tác vụ cần thực hiện bằng cách lấy từ database (cơ sở dữ
liệu). Đưới đây là hai hình minh họa cho ứng dụng mà bạn sẽ xây dựng:
[Hình 1 - Sẽ cập nhật]
[Hình 2 - Sẽ cập nhật]
Bạn sẽ học được những gì?
Với loạt bài hướng dẫn trong chương 1, bạn sẽ học được:
· Cách tạo một dự án ASP.NET MVC
· Cách tạo Controllers và Views
· Cách tạo database mới bằng cách sử dụng Entity Framework Code First
· Cách lấy dữ liệu từ database và hiển thị chúng
· Cách sửa dữ liệu và áp dụng data validation (kiểm tra tính hợp lệ dữ liệu)
Tạo ứng dụng đầu tiên
Đầu tiên hãy chạy Visual Studio 2010 hoặc Visual Web Developer 2010 Express và tạo một dự án mới,
bạn sẽ thấy hiển thị cửa sổ chọn loại dự án cần tạo như sau:
Bạn hãy chọn mẫu dự án ASP.NET MVC 3 Web Application và đặt tên cho ứng dụng là ToDoApp và
nhấn OK để tạo dự án.
Lúc đó hộp thoại New ASP.NET MVC Project sẽ xuất hiện và bạn sẽ có ba sự lựa chọn, bạn sẽ chọn
Internet Application để dự án có cài đặt sẵn mã cho phép người dùng đăng ký tài khoản, đăng nhập
và đăng xuất bằng cách sử dụng Membership Provider của ASP.NET.
Đồng thời bạn cũng chọn luôn View Engine là Razor để sử dụng Razor View Engine. Razor View
Engine là điểm mới trên ASP.NET MVC 3, nó giúp cho chúng ta lập trình các Views một cách dễ dàng
với cú pháp đơn giản hơn và thông minh hơn so với Web Forms View Engine ở các bản ASP.NET
MVC trước.
Khi bạn click chọn nút OK, Visual Studio sẽ tạo dự án mới cho bạn, và bạn đã có một dự án ASP.NET
MVC mà hầu như chưa phải lập trình một dòng code nào. Tuy nhiên dự án được tạo ra chỉ mới có
cấu trúc cơ bản giúp bạn dễ dàng làm quen và lập trình với ASP.NET MVC.
Cấu trúc của dự án được tạo ra như sau:
Dự án ToDoApp có các thành phần mà chúng ta cần quan tâm là:
· Tập tin Global.asax có chứa cấu hình định tuyến cho các request để ánh xạ các request với
Controller và Action tương ứng
· Tập tin Web.config chứa các cấu hình dành cho ứng dụng web
· Thư mục Content chứa các tập tin tĩnh như tập tin CSS, hình ảnh v.v
· Thư mục Scripts chứa các tập tin JavaScript để chúng ta sử dụng trong các Views
· Các thành phần Controllers, View, Models của MVC sẽ được lưu vào ba thư mục cùng tên
o Bạn nên lưu ý rằng mỗi Controller sẽ có một thư mục chứa các Views thuộc về
Controller đó trong thư mục Views. Ví dụ HomeController sẽ có thư mục
/Views/Home chứa các View tương ứng của Controller này.
Khởi chạy ứng dụng
Đến đây bạn hãy nhấn phím F5 hoặc Ctrl-F5 để khởi chạy ứng dụng Web, bạn sẽ thấy trang web
được chạy trên trình duyệt mặc định như dưới đây:
Bạn cần lưu ý rằng, website được chạy trên ASP.NET Development Server và có cổng là 39797.
Khi chạy được ứng dụng này, bạn có thể thử đăng ký tài khoản và đăng nhập bằng cách click chuột
vào link Log On.
Lúc này ứng dụng chỉ là một ứng dụng căn bản với chức năng đăng nhập. Bạn hãy theo dõi bài tập
tiếp theo để có thể hiểu cách lập trình ứng dụng và tìm hiểu cách hoạt động của ASP.NET MVC.
Tạo Controller cho ứng dụng ASP.NET MVC
Bài viết được cập nhật từ 3:39:49 SA, 19 Tháng Tám 2012 bởi tumivn
Chú ý: Hãy đăng nhập để download tập tin đính kèm!
Ở bài trước bạn đã học cách tạo ứng dụng ASP.NET MVC, và ở bài học này bạn sẽ học cách tạo
Controller và tìm hiểu một chút về Controller trong mô hình MVC.
MVC là viết tắt của model-view-controller. MVC là mẫu thiết kế để phát triển các ứng dụng có kiến
trúc tốt và dễ bảo trì. Ứng dụng MVC bao gồm:
· Controller: Là các lớp có trách nhiệm tiếp nhận và xử lý các request gởi đến cho ứng dụng, lấy
dữ liệu lên (model) và chọn view để kết hợp với model để tạo ra kết quả trả về cho trình khách.
· Models: Là các lớp đại diện cho dữ liệu của ứng dụng, chúng còn có chức năng kiểm tra tính
hợp lệ dữ liệu.
· Views: các tập tin template (mẫu) để ứng dụng sử dụng và tạo ra các kết quả HTML trả về cho
trình khách.
Chúng ta sẽ tìm hiểu các thành phần nói trên trong loạt bài hướng dẫn này để có thể tự mình xây
dựng được ứng dụng MVC.
Bây giờ hãy bắt đầu để tạo Controller cho ứng dụng. Ở cửa sổ Solution Explorer, nhấp chuột phải lên
thư mục Controllers và sau đó chọn Add Controller.
Hãy đặt tên cho controller là HelloWorldController, hãy chọn default template (mẫu mặc định) là
Emty Controller.
Sau đó lớp HelloWordController sẽ được lưu bên trong tập tin HelloWordController.cs ở thư mục
Controllers.
Bên trong của lớp HelloWorldController, bạn hãy tạo hai phương thức Index và Welcome như mã
dưới đây. Các phương thức sẽ trả về các đoạn mã HTML để hiển thị ở các trình duyệt.
using System.Web.Mvc;
namespace ToDoApp.Controllers
{
public class HelloWorldController : Controller
{
//
// GET: /HelloWorld/
public string Index()
{
return "Đây là Action <b>Mặc định</b>!";
}
public string Welcome()
{
return "Đây là action Wellcome!";
}
}
}
Các bạn sẽ thấy, một Controller phải kế thừa từ lớp Controller trong namespace System.Web.Mvc.
Bạn cần lưu ý rằng, bất kỳ một phương thức công (định nghĩa bởi từ khóa public) nào đều được xem
như là một action. Nghĩa là nếu bạn duyệt /[Tên Controller]/[Tên Action] như /HelloWord/Index thì
kết quả sẽ được trả về cho trình duyệt.
ASP.NET MVC có cách định tuyến mặc định là:
/[Controller]/[Action]/[Parameters]
Tuy nhiên nếu bạn muốn có cách định tuyến khác theo ý của bạn, bạn cũng có thể tự định nghĩa cho
ứng dụng của bạn, nhưng nó không nằm trong phạm vi của bài viết này.
Giả sử bạn muốn điều chỉnh action Wellcome của HelloWorldController để tiếp nhận các tham số
được gởi lên từ trình duyệt như sau:
public string Welcome(string name, string city)
{
return "Xin chào " + name + " đến từ " + city + "!";
}
Với việc phương thức Welcom nhận hai tham số name và city như vậy, chúng ta có thể truy vấn từ
trình duyệt và truyền hai tham số có tên là name và city
(http://localhost:39797/HelloWorld/Welcome?name=Tumi&city=Vietnam), lúc đó hệ thống sẽ tự
động chuyển các tham số được truyển bởi URL hoặc từ Form trong mã HTML thành các biến để
truyền vào lời gọi của action.
Đến lúc này ta chỉ mới trả về những chuỗi HTML nhưng chúng ta cũng đã thao tác đến phần View
và phần Controller trong mô hình MVC. Tuy nhiên view ở đây là cả chuỗi được trả về trực tiếp cho
trình duyệt. Tất nhiên bạn không chỉ muốn trả về các chuỗi như thế này, thay vì đó thì chúng ta sẽ sử
dụng các view template để tạo ra mã HTML để trả về cho trình duyệt.
Bài hướng dẫn tiếp theo sẽ giúp bạn thao tác với View và cú pháp Razor!
Happy Coding!
Tạo View trong ứng dụng ASP.NET MVC
Bài viết được cập nhật từ 8:08:21 SA, 25 Tháng Tám 2012 bởi tumivn
Trong bài trước chúng ta đã học cách tạo một controller trong ứng dụng ASP.NET MVC, tuy nhiên kết
quả trả về của các action chỉ là các chuỗi ký tự đơn giản, với bài học này, chúng ta sẽ học cách để sử
dụng các mẫu (.cshtml) để sinh ra mã HTML trả về cho người dùng.
Nếu bạn không quên, thì trong bài trước của loạt bài hướng dẫn này, chúng ta đã tạo controller có
tên là HelloWorldController, và bây giờ chúng ta sẽ tạo các view template bằng cách sử dụng Razor
View Egine để tạo ra các trang HTML phức tạp và có giao diện như mong muốn của bạn để trả về
cho trình duyệt. Razor là một view engine rất thông minh, giúp giảm thiểu số lượng mã lệnh mà bạn
cần để tạo ra một mẫu view, và phối hợp nhuần nhuyễn giữa mã ngôn ngữ lập trình (ở đây là C#) và
mã đánh dấu HTML.
Đầu tiên bạn hãy điều chỉnh mã của action Index để phương thức này trả về một đối tượng kiểu
View như sau:
public ActionResult Index()
{
return View();
}
Để tạo ra view template bạn có thể dùng cách như sau, nhấp chuột phải lên tên của action (ở đây là
Index, và chọn Add View như hình dưới đây:
Và sau đó hộp thoại Add View sẽ xuất hiện, hãy để mọi thứ như mặc định và nhấn vào nút Add:
Và Visual Studio sẽ tạo cho bạn tập tin Index.cshtml bên trong thư mục ~/Views/HelloWorld, ở hình
bên dưới bạn sẽ thấy nội dung của tập tin Index.cshtml phía bên phải.
Và bây giờ bạn sẽ điều chỉnh một chút để có thể nhận ra View đó là của bạn khi trả kết quả về cho
trình duyệt. Chúng ta sẽ điều hình Index.cshtml như sau:
@{
ViewBag.Title = "Index";
}
<h2>Controller: HelloWorld - Action: Index</h2>
<p>
Lần đầu thao tác với View Template.
</p>
Tiếp theo bạn sẽ chạy ứng dụng và duyệt ứng dụng tại địa chỉ http://localhost:xxxx/HelloWorld và
bạn sẽ thấy kết quả như bên dưới.
Bạn thấy ngạc nhiên vì trên URL không bao gồm tên của action nhưng server vẫn hiểu là action
Index, tuy nhiên, với cấu hình hiện tại action có tên là Index là action mặc định cho các lợi gọi đến
Controller mà không quy định action. Chúng ta sẽ tìm hiểu về định tuyến (routing) trong các phần
sau. Dù sao, khởi đầu với View như vậy cũng là đủ tốt, mặc dù tới lúc này bạn chỉ gõ những chuỗi
văn bản tĩnh mà thôi. Một điều nữa là tiêu đề của trang web là My MVC Application là một cái tên
mặc định, chúng ta sẽ thay đổi trong bước tiếp theo.
Thay đổi Views và Layouts
Để thay đổi tiêu đề My MVC Application xuất hiện ở phần đầu của trnag web, chúng ta cần phải thay
đổi nội dung ở giao diện chung được áp dụng mặc định cho các view của ứng dụng. Để làm được
điều này, bạn hãy đến thư mục /Views/Shared ở cửa sổ Solution Explorer và mở tập tin
_Layout.cshtml. Tập tin này được gọi là trang layout và nó sẽ chia sẽ giao diện chung cho các trang
khác sử dụng.
Các mẫu giao diện cho phép bạn có thể quy định giao diện HTML chung chong cả website của bạn
tại một nơi và áp dụng nó ở nhiều trang khác nhau. Bạn cũng cần lưu ý dòng @RenderBody() gần
cuối của tập tin. RenderBody là một nơi khi mà các nội dung của các view được tạo ra sẽ xuất hiện
tại vị trí đó.
Bạn hãy thay đổi tiêu đề nằm trong thẻ <h1> từ “My MVC Application” thành “To do App”. Sau đó
hãy vào trình duyệt và click thử vào link About, bạn sẽ thấy tiêu đề của trang cũng đã thay đổi theo
thay đổi ở trang Layout. Như vậy nếu áp dụng layout, khi bạn thay đổi trang layout, các trang áp
dụng nó cũng sẽ thay đổi theo.
Sau khi đổi xong, bạn hãy chử chạy lại ứng dụng và duyệt qua các link khác nhau thì đều thấy tiêu đề
của các trang là “To do App”.
Bây giờ chúng ta sẽ thay tiêu đề của trang HelloWorl/Index.
Hãy mở tập tin /Views/HelloWorld/Index.cshtml, bạn sẽ thay đổi nội dung của ViewBag.Title thành
“To do list”. Nếu bạn để ý một chút ở trang _Layout.cshtml mà chúng ta vừa thay đổi trước đây, thì
chúng ta sẽ thấy có nội dung <title>@ViewBag.Title</title>, vì vậy khi bạn quy định nội dung của
ViewBag.Title thì tiêu đề của cửa sổ trình duyệt cũng sẽ thay đổi theo. Đồng thời bạn sẽ điều chỉnh
thêm một chút ở thẻ <h2> của /Views/HelloWorld/Index.cshtml như sau:
ViewBag là một đối tượng của .NET, và nó được sử dụng bên trong view cùng với mã HTML, bạn sẽ
thấy những ký tự như khối lệnh C# bắt @{ … }, hoặc @<tên biến>, đó là những điểm khác biệt do
Razor View Engine mang lại, để giúp bạn có thể dễ dàng sử dụng ngôn ngữ C# một cách thông
minh trong các view template.
Và bạn cũng thấy rằng, view template và layout template được kết hợp với nhau để tạo ra một trang
web, và do đó đối tượng ViewBag cũng được sử dụng ở _Layout.cshtml. Kết quả là hình bên dưới:
Như vậy, đến đây chúng ta đã thao tác với Views với Controller, nhưng chúng ta chưa làm gì với chữ
M (Model) trong mô hình MVC, chúng ta sẽ học cách sử dụng Model trong mục tiếp theo.
Truyền dữ liệu từ Controller đến View
Trước khi chúng ta thao tác với database (Cơ sở dữ liệu) thật sự, chúng ta cần phải học cách truyền
dữ liệu cho View từ Controlller trước. Controller là một lớp được xây dựng nhằm xử lý một số truy
vấn nào đó từ phía trình duyệt, mỗi action thường dùng để xử lý một truy vấn cụ thể nào đó. Và tại
mỗi action, chúng ta có thể chọn một view bất kỳ để trả kết quả về. Vấn đề là, nếu view đó chỉ có nội
dung tĩnh, thì có lẽ chúng ta không cần tới mô hình MVC. Để hiển thị được dữ liệu động thì chúng ta
cần truyền dữ liệu (Model) và kết hợp với view template để tạo ra trang HTML để trả về cho trình
duyệt.
Như vậy, controller có vai trò sinh ra hoặc lấy dữ liệu cần thiết để áp dụng vào view template và tạo
ra nội dung trả về cho trình duyệt. View template (các tập tin *.cshtml) không nên có bất kỹ mã logic
nào hoặc trực tiếp thao tác với trình duyệt. Thay vào đó, chúng chỉ nên nhận dữ liệu được truyền đến
từ controller. Nếu bạn làm khác đi, bạn đã vi phạm mô hình MVC. Một trong những mục tiêu lớn mà
các nhà lập trình áp dụng mô hình MVC là để áp dụng nguyên lý SoC (Seperation of Concerns – tách
biệt các mối quan tâm) để giúp mã lệnh sạch sẽ và dễ dàng bảo trì hơn.
Giả thử chúng ta muốn action HelloWorld/Index hiển thị danh sách các việc cần làm, chúng ta sẽ tạo
ra một mảng các chuỗi là các việc cần làm, và hiển thị nó ở view như sau:
public ActionResult Index()
{
var tasks = new List<string>()
{
"Viết bài hướng dẫn lập trình MVC",
"Điều chỉnh chức năng comment của Jou Lập
trình",
"Đọc truyện Don Kihote",
"Trả lời email của anbinhtrong"
};
ViewBag.Tasks = tasks;
return View();
}
Bạn lại thấy xuất hiện đối tượng ViewBag trong mã lệnh bên trên, nó đã xuất hiện ở view, ở layout
template, và giờ là ở action. Thực chất, ViewBag là một đối tượng kiểu dynamic (một kiểu dữ liệu
động của được giới thiệu ở .NET Framework 4.0), với kiểu này bạn có thể gán bất cứ thuộc tính nào
cho nó ví dụ như ViewBag.Title, hoặc ViewBag.Tasks dù nó không được định nghĩa từ trước. Chúng
tôi sẽ có bài giới thiệu về kiểu dynamic và C# trong một khóa học khác. Và quan trọng hơn cả,
ViewBag là đối tượng mặc định được truyền giữa Action và View, nói như vậy có nghĩa là, khi bạn
quy định giá trị của ViewBag.Tasks ở action, bạn cũng có thể truy xuất nó ở view.
Giờ bạn hãy mở view tương ứng của action HelloWorld/Index là /Views/HelloWorld/Index.cshtml và
cập nhật nó như sau:
@{
ViewBag.Title = "To do list";
}
<h2>@ViewBag.Title</h2>
<p>
<ul>
@foreach (var task in ViewBag.Tasks)
{
<li>@task</li>
}
</ul>
</p>
Lần này thì bạn thấy chúng ta sử dụng câu lệnh foreach của C# ngay bên trong view, và nếu bạn tinh
ý, thì mỗi lần bạn muốn viết một câu lệnh C# hoặc sử hiển thị giá trị của một biến C# thì bạn đều sử
dụng dấu @ phía trước nó. Và điều thần kỳ ở đây, là bạn hoàn toàn có thể truy xuất thuộc tính Tasks
của ViewBag, duyệt nó và hiển thị từng đối tượng trong danh sách này bằng thẻ <ul> và <li>.
Hãy biên dịch lại ứng dụng và duyệt địa chỉ /HelloWorld/Index, bạn sẽ thấy kết quả như sau:
Thật tuyệt vời, vì những dữ liệu bạn tạo ra ở Controller đã xuất hiện ở kết quả trả về cho người dùng.
Và bạn đã chạm nhẹ vào chữ M (model) trong mô hình MVC. Chúng ta sẽ thao tác nhiều hơn với
Model và truy xuất vào database để lấy dữ liệu trong bài viết tiếp theo.
Thêm Model cho ứng dụng ASP.NET MVC
Bài viết được cập nhật từ 1:48:29 CH, 26 Tháng Tám 2012 bởi tumivn
Chú ý: Hãy đăng nhập để download tập tin đính kèm!
Đây là bài thứ năm trong chương 1 cho series bài học Căn bản lập trình ASP.NET MVC. Với bài học
này bạn sẽ học cách tạo một lớp model và cách kết nối với database bằng Entity Framework Code
First để lấy dữ liệu, lập trình các action để lấy dữ liệu đưa vào đối tượng model và phối hợp với view
để tạo ra kết quả trả về cho trình duyệt.
Tạo các lớp model
Tại cửa sổ Solution Explorer, nhấp chuột phải tại thư mục Models, chọn Add và sau đó chọn Class
Lúc đó sẽ xuất hiện hộp thoại, bạn hãy nhập tên class là Task (tác vụ), các trường của Task gồm có Id
(khóa chính), Content (nội dung công việc), CreateDate (ngày tạo), DueDate (ngày phải hoàn thành).
using System;
namespace ToDoApp.Models
{
public class Task
{
public int Id { get; set; }
public string Content { get; set; }
public DateTime CreateDate { get; set; }
public DateTime DueDate { get; set; }
}
}
Chúng ta sẽ sử dụng lớp Task để đại diện cho dữ liệu về các tác vụ cần phải thực hiện được lưu ở
database. Và mỗi trường của lớp Task sẽ ánh xạ với một cột trong bảng Tasks của database.
Tiếp theo chúng ta sẽ tạo một lớp cũng nằm ở thư mục Models có tên là TaskDbContext
using System.Data.Entity;
namespace ToDoApp.Models
{
public class TaskDbContext: DbContext
{
public DbSet<Task> Tasks { get; set; }
}
}
Lớp TaskDbContext là lớp kế thừa từ lớp DbContext của EntityFramework, đây là ngữ cảnh giúp bạn
có thể thao tác với dữ liệu từ database thông qua Entity Framework. Lớp DbContext nằm trong
namespace System.Data.Entity.
Tạo chuỗi kết nối và làm việc với database SQLCE
Lớp TaskDbContext là lớp bạn tạo ra để kết nối với database và ánh xạ lớp Task với dữ liệu bên trong
database. Nhưng để kết nối với database, chúng ta luôn cần phải có một chuỗi kết nối, và bây giờ
chúng ta sẽ thêm thông tin chuỗi kết nối vào tập tin Web.config của ứng dụng.
Có nhiều tập tin Web.config, nhưng tập tin web.config mà bạn cần mở là tập tin nằm ở thư mục gốc
của ứng dụng, đó là tập tin chứa các cấu hình chính dành cho ứng dụng web mà bạn đang lập trình.
Bây giờ bạn hãy thêm chuỗi kết nối sau vào trong thẻ <connectionStrings> ở trong tập tin
Web.config
<add name="TaskDBContext"
connectionString="Data Source=|DataDirectory|Todo.sdf"
providerName="System.Data.SqlServerCe.4.0"/>
Điều bạn cần lưu ý về nội dung của chuỗi kết nối trên đó là chuỗi kết nối trỏ về tập tin Todo.sdf nằm
ở thư mục App_Data của ứng dụng. Tập tin Todo.sdf là một tập tin database theo định dạng của
SQLCE (SQL Compact Edition – phiên bản thu gọn của SQL Server). Và quan trọng hơn cả là tên của
chuỗi kết nối là TaskDbContext, nó trùng với tên của lớp TaskDbContext, và như vậy, khi ứng dụng
chạy, khi bạn không định nghĩa cho TaskDbContext về chuỗi kết nối nó cần tìm để kết nối, nó sẽ tự
động tìm chuỗi kết nối có tên trùng với tên của nó và dựa vào đó để thiết lập kết nối với database.
Đến đây thì bạn đã có những bước chuẩn bị để sẵn sàng viết controller quản lý các tác vụ. Bài viết
tiếp theo chúng ta sẽ xây dựng TaskController nhằm quản lý các tác vụ và cho phép người dùng tạo
và hiển thị danh sách các việc cần làm.
Truy xuất dữ liệu từ Controller
Bài viết được cập nhật từ 3:04:27 SA, 30 Tháng Tám 2012 bởi tumivn
Chú ý: Hãy đăng nhập để download tập tin đính kèm!
Đây là bài viết thứ bảy trong chương 1 của loạt bài hướng dẫn sơ nhập với ASP.NET MVC. Trong phần
này bạn sẽ tạo ra lớp TaskController và viết mã để lấy về dữ liệu và hiển thị chúng lên trình duyệt
bằng cách sử dụng view template.
Hãy mở dự án mà bạn đã làm hoặc mở dự án đính kèm của bài học trước, sau đó hãy nhấn chuộc
phải vào thư mục Controllers. Bạn chọn các tùy chọn như hình dưới đây:
Ở tùy chọn thứ 2, khi bạn chọn “Controller with read/write ”, thì Visual Studio sẽ tạo ra các CRUD
actions cho controller để tạo, đọc, cập nhật xóa dữ liệu (CRUD ~ create, read, update, delete) với đối
tượng model được xử lý ở đây là Task. Visual Studio sẽ sử dụng Entity Framework và TaskDbContext
để tạo mã lệnh truy xuất database.
Sau khi bạn nhấn Add ở cửa sổ trên, Visual Studio sẽ tạo ra các tập tin và thư mục (được bôi vàng) ở
hình dưới đây:
Hãy chạy ứng dụng và chuyển đến địa chỉ /Task bằng cách điều hướng trên thành địa chỉ của trình
duyệt, lúc đó request sẽ được chuyển đến action mặc định của TaskController là Index. Và kết quả là
một danh sách rỗng các tác vụ, bởi vì bạn chưa thêm bất cứ tác vụ nào vào.
Tạo một tác vụ
Bạn hãy chọn link Create New và được điều hướng đến /Task/Create và hãy điền thông tin về tác vụ,
sau đó nhấn vào nút Create
Hãy nhấp vào nút Create để dữ liệu trong form được gởi lên server, ở đó thông tin của tác vụ sẽ
được lưu trong database. Nếu bạn tạo thành công, trang web sẽ được điều hướng đến /Task/Index, ở
đó bạn sẽ thấy được danh sách các tác vụ cần thực hiện: