Bắt đầu từ bài viết này, chúng ta sẽ tìm hiểu về cách lập trình ASP. NET MVC, lập trình ứng dụng web với mô hình hiện đại, hoạt động của dự án được chia thành các tầng - Layer để dễ dàng bảo trì - mở rộng. Bài học đầu tiên về ASP. NET MVC bao gồm các mục
Tạo ứng dụng ASP. NET MVC đầu tiên
MVC đó là một mô hình lập trình, có sự cố gắng chia mã thành 3 phần.
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...4 triển khai các mô hình dữ liệu, truy cập dữ liệu.
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...5 biểu diễn dữ liệu cho người dùng,
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...6 nhận yêu cầu trình duyệt gửi đến và trả về phản hồi http
Trong NET Core 3. x tạo mẫu ứng dụng ASP. NET MVC fast from template by command
dotnet new mvc
Vui lòng tạo một thư mục mẫu đặt tên là
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...7, vào thư mục đó, rồi nhập lệnh để tạo dự án thực thi
Dự án tạo mẫu là cấu trúc cơ bản cho ứng dụng ASP. NET CORE MVC. Trong tổ chức các thư mục dự án đã thấy
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...
8. nơi chứa các lớp sẽ nhận yêu cầu gửi đến và trả về nội dung Phản hồi HTTP/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...
9. nơi chứa các lớp cung cấp, xử lý dữ liệuapp.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; endpoints.MapControllerRoute[ name: "myroute", defaults: new {controller="Home", action = "Index"}, pattern: "{title}-{id}.html"]; }];
0. chứa các tập tin. cshtml to build HTMLapp.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; endpoints.MapControllerRoute[ name: "myroute", defaults: new {controller="Home", action = "Index"}, pattern: "{title}-{id}.html"]; }];
1. Chứa các tệp tĩnh [hình ảnh, js, css. ]. Trong thư mục này đã sao chép thư viện CSS Bootstrap và JS JQuery sẵn có
Kết quả chạy trang web như hình sau
Một số khái niệm chung
app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; endpoints.MapControllerRoute[ name: "myroute", defaults: new {controller="Home", action = "Index"}, pattern: "{title}-{id}.html"]; }];
2. Một lớp C# do bạn định nghĩa kế thừa từ lớp Microsoft. AspNetCore. mvc. Bộ điều khiển, khi các truy vấn đến ứng dụng tùy thuộc vào cấu hình, căn cứ vào URL truy cập mà bộ điều khiển được khởi động và thiết lập vào nó [trong các thuộc tính] tất cả thông tin của một yêu cầu và một phương thức trong bộ điều khiểnapp.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; endpoints.MapControllerRoute[ name: "myroute", defaults: new {controller="Home", action = "Index"}, pattern: "{title}-{id}.html"]; }];
3. Các hành động là các phương thức công khai [không tĩnh, không quá tải] trong bộ điều khiển được gọi là tùy chọn tự động tùy thuộc vào điều hướng của tuyến đường trong ứng dụng [căn cứ vào URL]Action trả về các kiểu khai thác từ IActionResult như ViewResult, EmptyResult, FileContentResult, RedirectResult, JsonResult. that is respone will return for browserTương ứng trong bộ điều khiển có sẵn các phương thức để trả về kiểu tương ứng trên như. Xem, Chuyển hướng, RedirectToAction, Nội dung, Tệp. , some Action could return to do not type khai báo từ IActionResult, thì nó tự động tạo ContentResult
Các yêu cầu [truy vấn] được ánh xạ vào hành động thông qua định tuyến. Các Action thường được trả về bằng cách gọi phương thức View[], View[model]
app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; endpoints.MapControllerRoute[ name: "myroute", defaults: new {controller="Home", action = "Index"}, pattern: "{title}-{id}.html"]; }];
4. Là các tập tinapp.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; endpoints.MapControllerRoute[ name: "myroute", defaults: new {controller="Home", action = "Index"}, pattern: "{title}-{id}.html"]; }];
5 tích hợp sẵn cú pháp Razor [razor engine], [vui lòng xem về Razor Page để biết cú pháp khi xem. cshtml] được tổ chức thành các thư mục cho từng Bộ điều khiển. Nếu tên bộ điều khiển là Trang chủ thì các chế độ xem được đặt trong mục /Chế độ xem/Trang chủ, tên các chế độ xem tệp tương ứng với tên Hành động của Bộ điều khiển, qua đó nó được sử dụng để xây dựng HTML
Truy cập ứng dụng với HTTPS
Mở tệp
app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; endpoints.MapControllerRoute[ name: "myroute", defaults: new {controller="Home", action = "Index"}, pattern: "{title}-{id}.html"]; }];6 ra, thấy mã sinh ra được đưa vào đường dẫn một Middleware là HttpsRedirection với lệnh ứng dụng. UseHttpsRedirection[];. Điều này có nghĩa là ứng dụng được tạo ra mặc định chỉ được truy cập bởi
app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; endpoints.MapControllerRoute[ name: "myroute", defaults: new {controller="Home", action = "Index"}, pattern: "{title}-{id}.html"]; }];7, sau đó trên môi trường sản phẩm bạn cần cấu hình Web Server như Apache, Nginx, IIS để xác thực ssl. Tuy nhiên, trong môi trường phát triển bạn cần xác thực SSL - nếu không thì có lỗi truy cập. Công cụ hỗ trợ dotnet làm điều này, bạn thực hiện lệnh sau
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...5
Sau đó bạn đã có thể truy cập được đến
app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; endpoints.MapControllerRoute[ name: "myroute", defaults: new {controller="Home", action = "Index"}, pattern: "{title}-{id}.html"]; }];8
Route - Định tuyển trong ASP. NET MVC
app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; endpoints.MapControllerRoute[ name: "myroute", defaults: new {controller="Home", action = "Index"}, pattern: "{title}-{id}.html"]; }];9 [tuyển dụng] is too too process process information through it application verify is required to process of any phương thức cho mỗi URL gửi đến. ASP. NET Core sử dụng một phần mềm trung gian để ánh xạ các URL tương ứng với bất kỳ phương thức nào của ứng dụng. Cụ thể hơn, Định tuyến được xác định là phương thức [hành động] trong Bộ điều khiển - qua đó nó chuyển các thông tin Yêu cầu đến và thi hành
Để tuyển dụng, đã trình bày trong phần trước ví dụ như Sử dụng EndpointMiddleware để tạo các điểm cuối nhánh trong đường ống trong UseEndpoints với các phương thức như
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...80,
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...81,
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...82
Đồng thời cũng đã nói về rẽ nhánh bằng cách sử dụng IApplicationBuilder. Bản đồ
Trong phần này, khi mở rộng dự án áp dụng MVC sử dụng thêm các phương thức tạo điểm cuối rẽ nhánh khi sử dụng với EndpointMiddleware, đầu tiên là
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...83
IEndpointRouteBuilder. MapControllerRoute
Cú pháp cơ bản đó là
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...2
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...84 tên của tuyến đường.
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...85 URL mẫu.
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...86 default value for route.
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...87 là các ràng buộc
Ví dụ
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...
Đoạn mã trên đã tạo ra một URL ánh xạ xạ tuyến vào Bộ điều khiển, mẫu này được xác định rõ trong
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...85 đó là URL có cấu trúc
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...89 nghĩa là URL phù hợp với mẫu có ba phần
dotnet new mvc00 tương ứng với tên Bộ điều khiển [tên lớp trong thư mục
Như vậy nếu truy cập địa chỉ
dotnet new mvc02 thì có nghĩa là sẽ tham chiếu đến lớp
dotnet new mvc03, gọi đến hành động [phương thức]
dotnet new mvc04 của nó
Tất nhiên, sẽ bổ sung thêm nhiều URL ánh xạ điểm cuối, khi truy vấn đến nó để so sánh từ trên xuống, gặp cái nào phù hợp sẽ chuyển bộ điều khiển hành động/hành động tương ứng này. Ví dụ
app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; endpoints.MapControllerRoute[ name: "myroute", defaults: new {controller="Home", action = "Index"}, pattern: "{title}-{id}.html"]; }];
Ở Route tên
dotnet new mvc05 phù hợp khi truy cập URL định dạng
dotnet new mvc06, ROUTE this not only Controller, Action in pattern which only ra in defaults as on. Các Url phù hợp đều dẫn đến thi hành
dotnet new mvc07
Create a force in Route - URL
Với mỗi biến trong Route [như bộ điều khiển, hành động, id, tiêu đề. ] có thể hủy chế phải phù hợp với điều kiện nào đó, thông thường những điều kiện đó là biểu thức chính quy [RegEx - xem biểu thức chính quy]. Ví dụ như Route có tên
dotnet new mvc05 sau đây
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...8
Bạn có thể viết các ràng buộc nhanh chóng trực tiếp trong mẫu [xem thêm ở EndpointMiddleware đọc kỹ phần ràng buộc], các ràng buộc cũng nhanh chóng tham khảo tại route-constraint-reference ], ví dụ
dotnet new mvc0
Tạo Controller trong ASP. NET MVC
Bộ điều khiển có chức năng nhận Yêu cầu gửi đến và trả về Phản hồi. ASP. NET MVC thì các Bộ điều khiển được lưu trong thư mục
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...8, đồng thời các bộ điều khiển lớp đặt tên có hậu tố là Bộ điều khiển, ví dụ như
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...30, như trong ứng dụng đã tạo ra có sẵn lớp
dotnet new mvc03
Thông thường các bộ điều khiển kế thừa từ lớp
app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; endpoints.MapControllerRoute[ name: "myroute", defaults: new {controller="Home", action = "Index"}, pattern: "{title}-{id}.html"]; }];2, sau đó khai báo các phương thức có thể được gọi khi Route ánh xạ đến gọi là Action
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...3
Các hành động
Bộ điều khiển có các phương thức gọi là Hành động, như trên hành động
dotnet new mvc04 nó trả về
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...34, thực tế nó có thể trả về bất kỳ loại dữ liệu nào. Ví dụ
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...9
Truy cập địa chỉ
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...35 thấy dòng văn bản trên
Trong Bộ điều khiển có sẵn các phương thức trả về các kiểu khai thác từ IActionResult như
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...1
Action return ContentResult
Lớp ContentResult là phần mở rộng của ActionResult, nó cho phép bạn tạo ra nội dung tài liệu trả về trong Action. Để tạo đối tượng ContentResult, cần khởi động nó với ba tham số bao gồm. nội dung tài liệu, kiểu tài liệu và mã hóa tài liệu
Ví dụ, trả về một nội dung văn bản
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...50
Action return JsonResult
Phương thức
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...36 của Bộ điều khiển trích xuất các thuộc tính của đối tượng và chuyển thành Json, Response trả về có tiêu đề Content-Type
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...37
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...51
Truy cập địa chỉ
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...38 kết quả
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...52
Chuyển hướng truy cập
Có một số phương thức để chuyển hướng, thường có tiền tố chuyển hướng, ví dụ như một số phương thức như
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...53
Trả về file nội dung
Phương thức File, tùy ngữ cảnh nó trả về file nội dung
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...54
Trả về 404 - NotFound
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...55
Sử dụng tham số cho Action
Có thể khai báo các Action có tham số, các tham số này được truyền thiết lập qua biến trong Route hoặc trong Url Query
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...56
Truy cập
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...39 trả về nội dung 110
Trong Layer Controller còn có các thuộc tính truy cập nhiều loại thông tin rất đa dạng, các thuộc tính này sẽ tìm hiểu dần dần ở các phần sau như
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...
90 - thuộc tính này giúp lấy được/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...
91 của ứng dụng/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...
92/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...
93/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...
94 - Route dữ liệu/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...
95 và/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...
96 - help convert data to View/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...
97 - giúp chia sẻ dữ liệu giữa các phiên bản/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...
98
Tạo View trong ASP. NET MVC - Công cụ xem dao cạo
Xem kết hợp với dữ liệu mà nó nhận được, phát nội dung HTML trả về cho khách hàng. Các View [tệp. cshtml] được bố trí trong thư mục
app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; endpoints.MapControllerRoute[ name: "myroute", defaults: new {controller="Home", action = "Index"}, pattern: "{title}-{id}.html"]; }];0, nó là các template - là các file có phần mở rộng
app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; endpoints.MapControllerRoute[ name: "myroute", defaults: new {controller="Home", action = "Index"}, pattern: "{title}-{id}.html"]; }];5, trong đó nó chứa mã HTML, đồng thời nhúng mã C# [server side script], những đoạn nhúng mã server side thì bắt
View is the files. cshtml sử dụng cú pháp Razor, thực tế trong ứng dụng mô hình MVC có áp dụng khôi phục tất cả các trang Razor Page đã hoàn chỉnh, bạn nên biết rõ về Razor Page đã trình bày ở phần trước, ví dụ như Cú pháp Razor, Bố cục
Nhiệm vụ của View là xuất HTML, trong NET Core có thành phần được gọi là Razor View Engine [từ đây gọi là Razor], nó có nhiệm vụ đọc các tệp View, thi hành các mã nhúng rồi xuất ra HTML
Khi một hành động trả về đối tượng
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...12 [phương thức Chế độ xem của bộ điều khiển tạo ra loại đối tượng này]. Thì nó sẽ sử dụng View
app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; endpoints.MapControllerRoute[ name: "myroute", defaults: new {controller="Home", action = "Index"}, pattern: "{title}-{id}.html"]; }];5 và Razor working để tạo nội dung HTML. Nó sẽ tìm đến thư mục
app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; endpoints.MapControllerRoute[ name: "myroute", defaults: new {controller="Home", action = "Index"}, pattern: "{title}-{id}.html"]; }];0, tìm đến thư mục cùng tên Trình điều khiển ví dụ
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...15, sau đó là tệp
app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; endpoints.MapControllerRoute[ name: "myroute", defaults: new {controller="Home", action = "Index"}, pattern: "{title}-{id}.html"]; }];5 cùng tên với Action - tệp
app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; endpoints.MapControllerRoute[ name: "myroute", defaults: new {controller="Home", action = "Index"}, pattern: "{title}-{id}.html"]; }];5 được tìm thấy sẽ sinh ra HTML
If so
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...57
Hành động trên sẽ sử dụng Xem tương ứng là
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...18, hãy biên tập tệp nội dung thành
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...58
Để chèn một dòng mã phía máy chủ, thì hãy sử dụng
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...11 sau đó là dòng mã, Razor tự nhận biết đoạn mã kết thúc khi phát thẻ HTML, như ví dụ trên
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...59
Để mở khối, hãy sử dụng thêm
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...500
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...20
Thêm thư mục lưu trữ View. cshtml
Các View cho các Action mặc định được lưu theo cấu trúc thư mục
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...501, nếu muốn thay đổi hoặc bổ sung cấu trúc mới thì hãy thiết lập cho RazorEngine khi khởi động. ConfigureService, ví dụ
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...21
Truyền dữ liệu Controller tới View with ViewBag
Để truyền dữ liệu trong MVC, bạn có thể sử dụng
- Thiết lập Model cho View, when call method View of Controller. Trọng Xem. cshtml sử dụng chỉ thị
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...
502 để thiết lập kiểu truyền tới Model của View - Use property
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...
96 of View and Controller - Use
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...
95 of View and Controller - Sử dụng TemData truyền dữ liệu giữa các trang [dùng cookie]
Để truyền dữ liệu từ Bộ điều khiển sang Chế độ xem, trong Bộ điều khiển có thể sử dụng thuộc tính
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...95, đây là kiểu Động, có thể thiết lập dữ liệu vào nó với cặp khóa/giá trị
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...22
Khi bộ điều khiển thiết lập dữ liệu thông qua ViewBag, thì ở chế độ xem truy cập thuộc tính này của bộ điều khiển với ký hiệu
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...11, đó là
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...23
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...24
Truyền dữ liệu Controller tới View with Model
Trong Razor có một thuộc tính có tên
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...507 thuộc tính này là một kiểu gereric [trong cú pháp ký hiệu nó là TModel, xem thêm Generic trong C# , TModel thực tế là kiểu gì đã được quyết định khi khởi động ViewResult]
Từ Controller, khi khởi tạo ViewResult với phương thức
app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; endpoints.MapControllerRoute[ name: "myroute", defaults: new {controller="Home", action = "Index"}, pattern: "{title}-{id}.html"]; }];4, bạn có thể chỉ ra tham số chính là Model, ví dụ
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...25
This time, in. phtml, Razor sẽ được đọc thông qua thuộc tính với tên Model - Ví dụ
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...26
Lúc này ở View, Razor có thể truy cập được nó thông qua thuộc tính
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...507, nhưng ở phần đầu cần khai báo kiểu Model này với
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...510
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...27
@model is a only market of Razor, it for known style of Model, cú pháp khai báo is @model Kiểu_Của_Model
Phát sinh bộ điều khiển, chế độ xem, trang dao cạo, khu vực
aspnet-codegenerator là công cụ bổ sung vào lệnh
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...511, nó giúp phát nhanh các cấu trúc thư mục chuẩn, tạo bộ điều khiển, chế độ xem, trang dao cạo nhanh hơn, tránh các thao tác đơn giả bạn phải làm thủ công
An ninh cài đặt công cụ lệnh dotnet aspnet-codegenerator
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...28
Thêm gói
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...29
Gõ lệnh để xem hướng dẫn
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...0
Create a Area
Area is area [thư mục] gom các Controller, Razor page thành một nhóm [xem Area]
Để tạo cấu trúc thư mục cấu trúc cho một Khu vực mà bạn nhập lệnh
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...1
Nó sẽ tạo thư mục
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...512 và trong đó là các thư mục con theo tiêu chuẩn như. Bộ điều khiển, Chế độ xem, Mô hình
Create ra Controller
Create a controller name First code source save at directory Controllers
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...2
Nó sẽ tạo ra lớp FirstController trong thư mục Controllers
Create View
Create out View set name Index, template is Empty, results save at Views/First use layout is _Layout
/... app.UseRouting[]; // Tạo các Endpoint app.UseEndpoints[endpoints => { endpoints.MapControllerRoute[ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"]; }]; /...3
Các lệnh trên nó còn phát sinh công việc với các Model, tạo các trang CRUD - tuy nhiên cần phải phân tích dự án với DbContext, sẽ nói ở các phần khác nhau