Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 1
MỤC LỤC
TỔNG QUAN NGOcircN NGỮ C 9
11 Giới thiệu C 9
12 Giới thiệu NET Core 9
13 Caacutec khaacutei niệm cơ bản 10
131 Tạo ứng dụng đầu tiecircn 10
132 Cấu truacutec chương trigravenh 10
133 Định danh (identifier) 11
134 Khocircng gian tecircn (namespace) 12
135 Toaacuten tử lsquorsquo 13
136 Từ khoacutea using 13
137 Từ khoacutea static 13
138 Biến (variable) 15
139 Từ khoacutea var 17
1310 Lệnh vagrave khối lệnh 17
1311 Biểu thức 18
1312 Chuacute thiacutech (comment) 19
14 Cấu truacutec điều kiện lựa chọn 20
141 Cacircu lệnh điều kiện if 20
142 Cacircu lệnh lựa chọn switch 21
15 Cấu truacutec Lặp 23
151 Cacircu lệnh for 23
152 Cacircu lệnh while 24
153 Cacircu lệnh do while 26
154 Cacircu lệnh For Each 27
16 Return Break Continue 27
17 Xử lyacute ngoại lệ (Exception) 28
171 Ngoại lệ lagrave gigrave 28
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 2 Version 11 ndash 032019
172 Cấu truacutec cacircu lệnh try catch finally 29
173 Phaacutet sinh vagrave bắt giữ ngoại lệ 29
174 Cacircu lệnh throw 30
175 Dẫn xuất một ngoại lệ 30
18 Caacutec bước Debug chương trigravenh 31
19 Hagravem (Function) 32
191 Định nghĩa 32
192 Khai baacuteo 33
193 Lời gọi hagravem 33
194 Truyền tham số cho hagravem 33
110 Mảng 37
1101 Giới thiệu mảng trong C 37
1102 Mảng 1 chiều 37
1103 Mảng nhiều chiều 39
1104 Mảng răng cưa 40
111 Tập hợp - Collections 41
1111 List 41
1112 ArrayList 42
1113 Hashtable 43
112 Khaacutei niệm lớp (Class) amp Đối tượng (Object) 44
1121 Lớp 44
1122 Đối tượng 44
1123 Thuộc tiacutenh (Field) 44
1124 Phương thức (Method) 45
1125 Bảng tầm vực thuộc tiacutenh truy cập 45
1126 Constructor 45
1127 Object Initialize 46
1128 Properties 46
1129 Automatic Properties 46
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 3
11210 Từ khoacutea static 47
11211 Phương thức mở rộng 47
11212 Kiểu Anonymous Type 48
113 Bagravei tập 48
THIẾT KẾ GIAO DIỆN WEB 54
21 Ngocircn ngữ HTML 54
211 Một số khaacutei niệm 54
212 Giới thiệu HTML 55
213 Cấu truacutec của 1 trang web 55
214 Caacutec tag HTML căn bản 56
215 Caacutec tag mới trong HTML5 57
216 Cấu truacutec 1 trang web 58
22 Bảng định kiểu ndash CASCADING STYLE SHEET (CSS) 59
221 Giới thiệu 59
222 Khởi động nhanh 59
223 Tạo style định dạng 60
224 Caacutec thuộc tiacutenh CSS 61
225 Bộ chọn (Selector) 63
226 Qui tắc nạp chồng 70
227 CSS3 71
23 JAVASCRIPT VAgrave JQUERY 74
231 Javascript 74
232 jQuery 75
233 Caacutec thagravenh phần giao diện jQueryUI 80
24 BootStrap 87
241 Giới thiệu 87
242 Hệ thống lưới ndash Grid System 87
243 Định dạng cơ bản 88
244 Form 91
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 4 Version 11 ndash 032019
TỔNG QUAN VỀ ASPNET CORE 22 94
31 Giới thiệu Ứng dụng Web 94
311 Giới thiệu 94
312 Nguyecircn lyacute hoạt động 94
313 Caacutec khaacutei niệm 95
314 Kiến truacutec cocircng nghệ ứng dụng web 96
32 Tổng quan về ASPNET Core MVC 97
321 Giới thiệu về ASPNET 97
322 ASPNET Core lagrave gigrave 97
323 Tạo ứng dụng ASPNET Core MVC 99
324 Application Startup 101
325 Dependency Injection 104
326 Middleware 104
327 Mocirc higravenh Model ndash View ndash Controller 105
328 Thecircm mới Controller 108
329 Thecircm mới View 110
CONTROLLER 112
41 Cấu truacutec Controller 112
42 Action Method 112
43 Tiếp nhận tham số 113
44 ActionResult 113
45 Routing 116
451 Routing 116
452 Attribute Routing 119
46 Action Selector 121
47 Bagravei tập Ứng dụng 122
471 Maacutey tiacutenh caacute nhacircn 122
472 Đọc ghi file 124
473 Upload file 128
TỔ CHỨC WEBSITE 133
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 5
51 Caacutec thagravenh phần layout 133
511 Giới thiệu 133
512 Đaacutenh dấu vugraveng động 135
513 Tập tin _ViewStartcshtml _ViewImportscshtml 136
52 Bundles ndash đoacuteng goacutei tagravei nguyecircn css vagrave javascript 137
53 Module hoacutea giao diện 139
531 Sử dụng Partial View 139
532 Truyền dữ liệu cho PartialView 141
54 Phacircn vugraveng ứng dụng (Areas) 141
541 Tạo phacircn vugraveng 141
542 Định tuyến 143
CHIA SẺ DỮ LIỆU 145
61 Dẫn nhập 145
62 Truyền từ Controller qua View 146
621 Sử dụng ViewBag vagrave ViewData 146
622 Sử dụng model 149
63 Session 151
631 Cagravei đặt amp Cấu higravenh 152
632 Sử dụng Session 152
633 Viacute dụ aacutep dụng 155
Razor amp Helper 158
71 Razor 158
711 Giới thiệu 158
712 Lagravem thế nagraveo noacute lagravem việc 158
713 Lagravem việc với caacutec đối tượng 159
714 Cacircu lệnh điều khiển 159
715 Bảng tham khảo lệnh Razor 161
72 Tag Helper 161
721 Anchor Tag Helper 162
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 6 Version 11 ndash 032019
722 Caacutec Model Helper 163
723 Form Tag Helper 163
724 Tag Helper tugravey biến 165
73 HTML Helper 168
731 HTML Links 168
732 Caacutec phần tử HTML Form 169
733 DropdownList vagrave ListBox 169
734 Custom HTML Helper 170
Kiểm lỗi dữ liệu vagraveo 172
81 Giới thiệu 172
82 Mocirc higravenh lập trigravenh kiểm lỗi 172
83 Annotation kiểm lỗi 176
84 Kiểm lỗi tugravey biến 179
841 Kiểm lỗi phiacutea Server 179
842 Kiểm lỗi phiacutea client 181
843 Regular Expression 186
Database amp EntityFramework 188
91 SQL vagrave cơ sở dữ liệu quan hệ 188
911 Khaacutei niệm SQL 188
912 Vai trograve của SQL 188
913 Mocirc higravenh dữ liệu quan hệ 189
914 Bảng (Table) 189
915 Khoacutea chiacutenh của bảng (Primary Key) 189
916 Mối quan hệ (Relationship) vagrave khoacutea ngoại (Foreign Key) 189
92 Sơ lược về cacircu lệnh SQL 190
921 Caacutec cacircu lệnh 190
922 Quy tắc sử dụng tecircn trong SQL 190
923 Kiểu dữ liệu 191
924 Toaacuten tử 191
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 7
93 View Stored Procedure Trigger Function 192
931 Bảng ảo ndash View 192
932 Stored Procedure 192
933 Trigger 193
934 Function 193
94 Giới thiệu Entity Framework Core 194
95 Lagravem việc với CSDL theo mocirc higravenh Database First 195
96 Mocirc higravenh Code First của EF Core 197
961 Entity 197
962 Tạo lớp DbContext Xacircy dựng lớp ngữ cảnh CSDL 199
963 Thực hiện Migration CSDL 199
97 Lập trigravenh Entity Framework 200
971 Toacutem tắt 200
972 Magraven higravenh hiển thị Loại 201
973 Magraven higravenh hiển thị chi tiết Loại (Detail) 203
974 Magraven higravenh chỉnh sửa Loại 204
975 Magraven higravenh thecircm mới (Create) 206
976 Magraven higravenh xoacutea Loai 209
98 LINQ 210
981 Giới thiệu 210
982 Kỹ thuật truy vấn dữ liệu 210
983 Truy vấn đối tượng 212
984 Truy vấn phacircn trang 213
985 Truy vấn 1 thực thể 213
986 Tổng hợp số liệu 213
987 Phương thức kiểm tra 213
988 Ứng dụng LINQ 213
Kỹ thuật AJAX 216
101 Giới thiệu Ajax 216
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 8 Version 11 ndash 032019
102 Cơ chế lagravem việc của ajax 216
1021 Cơ chế truyền thocircng đồng bộ 217
1022 Cơ chế truyền thocircng bất đồng bộ 217
103 jQuery Ajax 218
Web API 224
111 Giới thiệu về ASPNET Core Web API 224
112 Caacutec loại API Action 225
113 Xacircy dựng Web API với Entity Framework 226
1131 Xacircy dựng API dugraveng data local 226
1132 Xacircy dựng API dugraveng EF kết nối SQL Server 236
Bảo mật 240
121 Identity 240
122 Authentication 240
1221 Tạo dự aacuten coacute hỗ trợ security 240
1222 Cấu higravenh Cookie authentication 245
UPLOAD FILE LEcircN HOST 249
Thực hiện dự aacuten 258
TAgraveI LIỆU THAM KHẢO 259
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 9
TỔNG QUAN NGOcircN NGỮ C
11 Giới thiệu C C (đọc lagrave Cee Sharp) lagrave ngocircn ngữ lập trigravenh cho nền tảng Net platform Phiecircn bản đầu
tiecircn năm 2002 C trải qua caacutec phiecircn bản 10 20 30 hellip vagrave hiện nay lagrave 73 C được phaacutet triển
bởi đội ngũ kỹ sư của Microsoft trong đoacute người dẫn đầu lagrave Anders Hejlsberg vagrave Scott Wiltamuth
Ngocircn ngữ C khaacute đơn giản nhưng noacute coacute yacute nghĩa cao khi thực thi những khaacutei niệm lập
trigravenh hiện đại C bao gồm tất cả những hỗ trợ cho cấu truacutec thagravenh phần component lập trigravenh
hướng đối tượng Những tiacutenh chất đoacute hiện diện trong một ngocircn ngữ lập trigravenh hiện đại Vagrave C
hội đủ những điều kiện như vậy hơn nữa noacute được xacircy dựng trecircn nền tảng của hai ngocircn ngữ
mạnh nhất lagrave C++ vagrave Java
Trong ngocircn ngữ C mọi thứ liecircn quan đến khai baacuteo lớp điều được tigravem thấy trong phần
khai baacuteo của noacute Định nghĩa một lớp trong ngocircn ngữ C khocircng đogravei hỏi phải chia ra tập tin header
vagrave tập tin nguồn giống như trong ngocircn ngữ C++ Hơn thế nữa ngocircn ngữ C hỗ trợ kiểu XML
cho pheacutep chegraven caacutec tag XML để phaacutet sinh tự động caacutec document cho lớp
C cũng hỗ trợ giao diện interface Một lớp chỉ coacute thể kế thừa duy nhất từ một lớp cha
(tức lagrave khocircng cho đa kế thừa như trong ngocircn ngữ C++) tuy nhiecircn một lớp coacute thể thực thi nhiều
giao diện Khi một lớp thực thi một giao diện thigrave noacute sẽ cung cấp chức năng thực thi giao diện
C cũng hỗ trợ cấu truacutec nhưng khaacutei niệm về ngữ nghĩa của noacute thay đổi khaacutec với C++ Trong
C một cấu truacutec được giới hạn lagrave kiểu dữ liệu nhỏ gọn vagrave khi tạo thể hiện thigrave noacute yecircu cầu iacutet hơn
về hệ điều hagravenh vagrave bộ nhớ so với một lớp Một cấu truacutec khocircng thể kế thừa từ một lớp (hoặc kế
thừa một cấu truacutec khaacutec) nhưng một cấu truacutec coacute thể thực thi một giao diện
C cung cấp những đặc tiacutenh hướng thagravenh phần (component-oriented) những thuộc tiacutenh
những sự kiện Lập trigravenh hướng thagravenh phần được hỗ trợ bởi CLR cho pheacutep lưu trữ metadata với
matilde nguồn cho một lớp Metadata mocirc tả cho một lớp bao gồm những phương thức vagrave những
thuộc tiacutenh của noacute cũng như những bảo mật cần thiết vagrave những thuộc tiacutenh khaacutec Matilde nguồn chứa
đựng những logic cần thiết để thực hiện những chức năng của noacutehellip Do vậy một lớp được biecircn
dịch như lagrave một khối self-contained mocirci trường hosting biết được caacutech đọc metadata của một
lớp vagrave matilde nguồn cần thiết magrave khocircng cần những thocircng tin khaacutec để sử dụng noacute
12 Giới thiệu NET Core Microsoft NET Core lagrave một framework miễn phiacute matilde nguồn mở được phaacutet triển dựa vagraveo
NET Framework đa nền tảng (cross-platform ndash coacute thể chạy trecircn Windows Linux MacOS)
nhanh nhẹ vagrave hiện đại dugraveng để xacircy dựng ứng dụng di động web Windows desktop Mac
gaming machine learning amp AI IoT chạy trecircn được nhiều hệ điều hagravenh Windows Linux
Trước khi bắt đầu viết code bạn phải cagravei đặt NET Core vagrave caacutec cocircng cụ liecircn quan trecircn
maacutey Truy cập vagraveo trang web httpswwwmicrosoftcomnetdownload Coacute 3 caacutech để xacircy dựng
ứng dụng NET Core sử dụng command line (CLI) Visual Studio Code vagrave Visual Studio Trong
giaacuteo trigravenh nagravey chuacuteng tocirci sử dụng Visual Studio 2017 phiecircn bản 155
Sau khi học xong chương nagravey học viecircn coacute khả năng
minus Mocirc tả được caacutec kiểu dữ liệu cơ bản trong C minus Sử dụng được caacutec cấu truacutec lệnh minus Xử lyacute ngoại lệ vagrave biết Debug chương trigravenh
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 10 Version 11 ndash 032019
13 Caacutec khaacutei niệm cơ bản
131 Tạo ứng dụng đầu tiecircn Mở Visual Studio lecircn tạo mới Project chọn template lagrave NET Core becircn traacutei chọn ứng dụng
dạng Console App vagrave đặt tecircn project
Higravenh 1-1 Tạo project đầu tiecircn
132 Cấu truacutec chương trigravenh Bắt đầu từ chương trigravenh ldquoFirstConsoleApprdquo đơn giản trong C
using System namespace FirstConsoleApp class Program static void Main(string[] args) ConsoleWriteLine(Hello World)
Giải thiacutech
minus Phần đầu của chương trigravenh lagrave caacutec khai baacuteo thư viện với từ khoacutea using theo sau lagrave tecircn
của thư viện cần khai baacuteo
minus Toagraven bộ chương trigravenh được ldquođoacuteng goacuteirdquo trong một namespace Bạn sẽ rotilde hơn về
namespace trong caacutec phần sau
minus Bản thacircn chương trigravenh trong C lagrave một lớp (class) như bạn thấy coacute tecircn lagrave Program Lớp
nagravey chứa hagravem Main ndash điểm bắt đầu của chương trigravenh
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 11
minus Hagravem Main ở trecircn chỉ chứa duy nhất một cacircu lệnh ConsoleWriteLine(Hello World)
Để viết ra magraven higravenh dograveng chữ Hello World
Gotilde tổ hợp phiacutem CTRL+F5 để chạy chương trigravenh bạn sẽ được kết quả
Higravenh 1-2 Kết quả chạy chương trigravenh
Hagravem Main
Trong C hagravem Main() được viết kyacute tự hoa đầu vagrave coacute thể trả về giaacute trị void hay int Khi chương
trigravenh thực thi CLR gọi hagravem Main() đầu tiecircn hagravem Main() lagrave đầu vagraveo của chương trigravenh vagrave mỗi
chương trigravenh phải coacute một hagravem Main() Đocirci khi chương trigravenh coacute nhiều hagravem Main() nhưng luacutec nagravey
ta phải xaacutec định caacutec chỉ dẫn biecircn dịch để CLR biết đacircu lagrave hagravem Main() đầu vagraveo duy nhất trong
chương trigravenh
133 Định danh (identifier) Định danh được sử dụng để đặt cho caacutec đối tượng trong chương trigravenh như tecircn biến tecircn
kiểu dữ liệu tecircn hagravem tecircn lớp tecircn thuộc tiacutenh
Ngocircn ngữ lập trigravenh cũng giống như ngocircn ngữ tự nhiecircn chuacuteng đều coacute cuacute phaacutep vagrave ngữ
nghĩa Do đoacute việc đặt tecircn cho caacutec đối tượng trong chương trigravenh lagrave rất quan trọng lagravem sao phải
đảm bảo được hai yếu tố đuacuteng cuacute phaacutep vagrave dễ đọc
Quy tắc đặt tecircn
- Tecircn (định danh ndash identifier) lagrave một chuỗi kiacute tự bắt đầu bằng một chữ caacutei hoặc dấu gạch
nối ldquo _ ldquo được dugraveng để đặt cho caacutec đối tượng trong chương trigravenh (như lớp thuộc tiacutenh
phương thức biến kiểu dữ liệu )
- C phacircn biệt chữ in hoa vagrave in thường (case sensitive)
Chuacute yacute
- Tecircn khocircng được bắt đầu bằng một chữ số
- Tecircn khocircng được trugraveng với từ khoacutea
- Tecircn khocircng được chứa khoảng trắng
Viacute dụ đặt tecircn như sau lagrave sai cuacute phaacutep
int class = 3 tecircn trugraveng với từ khoacutea (class)
double 1abc = 123 tecircn bắt đầu bằng chữ số 1
Trong việc đặt tecircn ngoagravei những quy tắc bắt buộc caacutec lập trigravenh viecircn thường tigravem caacutech đặt
tecircn sao cho dễ đọc
Viacute dụ
Tecircn của biến (myDictionary) thường được đặt theo caacutech đặt tecircn cuacute phaacutep lạc đagrave
Tecircn của hagravem (DrawLine) vagrave thuộc tiacutenh (ColorBackground) đặt theo cuacute phaacutep Pascal
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 12 Version 11 ndash 032019
134 Khocircng gian tecircn (namespace)
Higravenh 1-3 Kiến truacutec NET Core
NET Framework cung cấp một thư viện caacutec lớp đồ sộ coacute tecircn lagrave FCL (Framework Class
Library) Trong đoacute Console chỉ lagrave một lớp nhỏ trong hagraveng ngagraven lớp trong thư viện Mỗi lớp coacute
một tecircn riecircng vigrave vậy FCL coacute hagraveng ngagraven tecircn như ArrayList Dictionary FileSelectorhellip
Điều nagravey lagravem nảy sinh vấn đề người lập trigravenh khocircng thể nagraveo nhớ hết được tecircn của caacutec
lớp trong NET Framework Tệ hơn nữa lagrave sau nagravey coacute thể ta tạo lại một lớp trugraveng tecircn với lớp đatilde
coacute chẳng hạn Viacute dụ trong quaacute trigravenh phaacutet triển một ứng dụng ta cần xacircy dựng một lớp từ điển vagrave
lấy tecircn lagrave Dictionary vagrave điều nagravey dẫn đến sự tranh chấp khi biecircn dịch vigrave C chỉ cho pheacutep một
tecircn duy nhất Khi đoacute chuacuteng ta phải đổi tecircn của lớp từ điển magrave ta vừa tạo thagravenh một caacutei tecircn khaacutec
chẳng hạn như myDictionary Do đoacute sẽ lagravem cho việc phaacutet triển caacutec ứng dụng trở necircn phức tạp
cồng kềnh Đến một sự phaacutet triển nhất định nagraveo đoacute thigrave chiacutenh lagrave cơn aacutec mộng cho nhagrave phaacutet triển
Để giải quyết vấn đề nagravey lagrave ta tạo ra một namespace Namsespace sẽ hạn chế phạm vi
của một tecircn lagravem cho tecircn nagravey chỉ coacute yacute nghĩa trong vugraveng đatilde định nghĩa Caacutec namespace để phacircn
thagravenh caacutec vugraveng cho caacutec lớp trugraveng tecircn khocircng tranh chấp với nhau
Như vậy nếu NET framework coacute xacircy dựng một lớp Dictionary becircn trong namespace
SystemCollections vagrave tương ứng ta coacute thể tạo một lớp Dictionary khaacutec nằm trong namespace
Lab2 điều nagravey hoagraven toagraven khocircng dẫn đến sự tranh chấp với nhau
Một viacute dụ về namespace
namespace Lab2 namespace NS1 class class1
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 13
static public void method1() lagravem cocircng việc gigrave đoacute namespace NS2 class class1 static public void method1() lagravem cocircng việc gigrave đoacute class Program static void Main(string[] args) Lab2NS1class1method1()gọi phương thức method1 trong namespace NS1 Lab2NS2class1method1()gọi phương thức method1 trong namespace NS2
135 Toaacuten tử lsquorsquo Trong viacute dụ trecircn dấu lsquorsquo được sử dụng để truy cập đến phương thức hay dữ liệu trong một
lớp (trong trường hợp nagravey phương thức lagrave method1()) vagrave ngăn caacutech giữa tecircn lớp đến một
namespace xaacutec định (namspace Lab2NS1vagrave lớp class1) Việc thực hiện nagravey theo hướng từ trecircn
xuống trong đoacute mức đầu tiecircn namespace lagrave Lab2 tiếp theo lagrave namspace NS1 tecircn lớp class1 vagrave
cuối cugraveng lagrave truy cập đến caacutec phương thức hay thuộc tiacutenh của lớp
136 Từ khoacutea using Để lagravem cho chương trigravenh gọn hơn vagrave khocircng cần phải viết từng namespace cho từng đối
tượng C cung cấp từ khoacutea lagrave using sau từ khoacutea nagravey lagrave một namespace hay subnamespace với
mocirc tả đầy đủ trong cấu truacutec phacircn cấp của noacute
Viacute dụ bằng việc khai baacuteo
using Lab2MyFolder
Ta coacute thể viết gọn hơn
StatementDemo test = new StatementDemo()
Thay vigrave
MyFolderStatementDemo test = new MyFolderStatementDemo()
137 Từ khoacutea static Theo mặc định caacutec thagravenh phần trong một lớp lagrave non static coacute nghĩa lagrave khi một đối tượng
thuộc lớp nagravey được tạo (khi ta gọi hagravem dựng ndash constructor) thigrave một vugraveng nhớ riecircng được cấp
phaacutet để lưu trữ caacutec thagravenh phần của đối tượng nagravey Viacute dụ
class MyClass
public int data
public void Method()
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 14 Version 11 ndash 032019
lagravem cocircng việc gigrave đoacute
class Program
static void Main()
MyClass obj1 = new MyClass()
MyClass obj2 = new MyClass()
obj1data = 4
obj2data = 6
ConsoleWriteLine(obj1data = + obj1dataToString())
ConsoleWriteLine(obj2data = + obj2dataToString())
obj1Method()
obj2Method()
Chạy chương trigravenh ta được kết quả
Điều nagravey khẳng định mỗi đối tượng của MyClass lưu dữ liệu của migravenh một caacutech riecircng
biệt Tương tự như vậy cho caacutec thagravenh phần khaacutec (phương thức thuộc tiacutenh)
Trong một số trường hợp chuacuteng ta cần caacutec đối tượng sử dụng chung một thagravenh phần
nagraveo đoacute C giải quyết vấn đề nagravey bằng caacutech ldquochuyểnrdquo thagravenh phần nagravey cho lớp thay vigrave ldquođểrdquo ở đối
tượng
Viacute dụ class OtherClass
static public int data
public void DisplayData()
ConsoleWriteLine(data = + dataToString())
static public void Method()
lagravem cocircng việc gigrave đoacute
class Program
static void Main()
OtherClassdata = 10
OtherClass obj1 = new OtherClass()
obj1DisplayData()
OtherClass obj2 = new OtherClass()
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 15
OtherClassdata = 20
obj2DisplayData()
OtherClassMethod()phương thức của lớp
Ta coacute kết quả
Kết quả nagravey chứng tỏ dograveng lệnh OtherClassdata = 20 đatilde taacutec động đến ldquothagravenh phầnrdquo dữ liệu
của đối tượng obj2 Hay chiacutenh xaacutec hơn lagrave chỉ coacute một vugraveng dữ liệu được tạo ra cho mọi đối tượng
của lớp OtherClass
138 Biến (variable) Khaacutei niệm
Biến lagrave khaacutei niệm rất quan trọng trong caacutec ngocircn ngữ lập trigravenh Biến lagrave một vugraveng nhớ (trong bộ
nhớ sơ cấp ndash RAM) được đặt tecircn dugraveng để lưu trữ dữ liệu Mỗi biến coacute một kiểu dữ liệu xaacutec định
Cuacute phaacutep Khai baacuteo
ltTecircn kiểugt Tecircn_biến
Viacute dụ sau đacircy khai baacuteo vagrave khởi tạo giaacute trị ban đầu cho caacutec biến
static void Main(string[] args)
int i = 0
double d = 15
string str = xin chao
bool flag = false
Biến được lưu trữ như thế nagraveo
Tugravey thuộc vagraveo kiểu dữ liệu magrave mối quan hệ giữa tecircn biến vagrave vugraveng dữ liệu chứa giaacute trị của
biến sẽ khaacutec nhau Cụ thể
- Caacutec biến thuộc kiểu giaacute trị - value type (như int double enum ) thigrave tecircn biến lagrave tecircn
vugraveng nhớ trực tiếp chứa giaacute trị của biến
0 i
15 d
xinchao str
false flag
RAM
Higravenh 1-4 Khai baacuteo biến
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 16 Version 11 ndash 032019
- Cograven caacutec biến thuộc kiểu tham chiếu - reference type (như class string ) thigrave tecircn biến lagrave
tecircn vugraveng nhớ chứa giaacute trị tham chiếu đến giaacute trị thực của biến (giaacute trị thực của biến được
lưu trong một vugraveng nhớ khaacutec)
Tầm vực của biến (variable scope) cho biết biến coacute hiệu lực ở đacircu vagrave khi nagraveo
Biến mức lớp lagrave caacutec biến được khai baacuteo như một fields non static của một lớp Biến nagravey coacute tầm
vực hoạt động trong toagraven bộ lớp magrave noacute được khai baacuteo Viacute dụ
class VariableScope
int databiến mức lớp
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 17
Biến mức phương thức (hagravem) lagrave caacutec biến được khai baacuteo (cục bộ) trong một phương thức hoặc
một hagravem Chuacuteng chỉ coacute tầm vực hoạt động trong phương thức hoặc hagravem nagravey Viacute dụ
class VariableScope
int databiến coacute tầm vực lớp
public int TinhTong(int n)
int i t = 0 biến mức phương thức hagravem
for (i = 1 i lt= n i++) t += i
return t
truy xuất biến t vagrave i ở đacircy lagrave khocircng hợp lệ
139 Từ khoacutea var Mục điacutech để khai baacuteo biến (trong phạm vi hagravem phương thức)
Yecircu cầu phải khởi tạo giaacute trị khi khai baacuteo
Kiểu dữ liệu ngầm định kiểu dữ liệu của biến lagrave kiểu của biểu thức becircn phải pheacutep gaacuten Khai baacuteo tường minh Sử dụng từ khoacutea var
Viacute dụ
1310 Lệnh vagrave khối lệnh Lệnh lagrave một khối (block) matilde thực hiện một cocircng việc xaacutec định Lệnh trong C kết thuacutec
bằng dấu ldquordquo
C phacircn chia caacutec lệnh theo nhoacutem như sau
Loại Từ khoacutea
Lệnh lựa chọn (rẽ nhaacutenh) if else switch case
Lệnh lặp do for foreach in while
Lệnh nhảy (jump) break continue default goto return
Lệnh điều khiển ngoại lệ throw try catch finally
Đatilde chưa kiểm tra checked unchecked
Lệnh fixed fixed
Lệnh khoacutea lock
Lệnh gaacuten (assignment statement) sử dụng để gaacuten giaacute trị cho một biến
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 18 Version 11 ndash 032019
Viacute dụ var i = 0 Caacutec lệnh xuất nhập console
C cung cấp caacutec phương thức static gắn với lớp Console để nhập vagrave xuất dữ liệu bagraven phiacutem ndash
magraven higravenh
- Nhập dữ liệu từ bagraven phiacutem
ConsoleRead() đọc 1 kiacute tự
ConsoleReadLine() đọc 1 dograveng
ConsoleReadKey() đọc 1 phiacutem
- Xuất dữ liệu ra magraven higravenh
ConsoleWrite()
ConsoleWriteLine() viết xong xuống dograveng mới
Viacute dụ
class CommandDemo
double diem string hoTen
public void NhapGiaTriChoBien()
ConsoleWrite(nhap ho ten = )
hoTen = ConsoleReadLine() ConsoleWrite(nhap diem = )
diem = doubleParse(ConsoleReadLine()) ConsoleWriteLine(xin chao 0 diem cua ban = 1 hoTen diem)
Khối lệnh lagrave một nhoacutem caacutec cacircu lệnh đặt trong cặp dấu vagrave Toagraven bộ khối lệnh được xem
như một lệnh (đơn)
Viacute dụ
if (a gt b)
temp = a
a = b
b = temp
1311 Biểu thức Tương tự như trong toaacuten học biểu thức bao gồm caacutec toaacuten hạng vagrave toaacuten tử (pheacutep toaacuten) Viacute dụ
id + MathSqrt(MathSin(MathPI)) + strLength
Lagrave một biểu thức gồm caacutec toaacuten hạng ở đacircy lagrave caacutec biến (i d str ) vagrave caacutec toaacuten tử ( +)
Mỗi biểu thức coacute một giaacute trị (khi biết giaacute trị của caacutec toaacuten hạng trong biểu thức đoacute)
Caacutec loại pheacutep toaacuten
- Pheacutep toaacuten số học + -
- Pheacutep toaacuten logic ampamp ||
- Pheacutep toaacuten quan hệ gt lt gt= lt= =
- Pheacutep toaacuten tăng giảm ++ --
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 19
- Pheacutep gaacuten = += -= = =
Trong một biểu thức toaacuten hạng coacute thể lagrave hằng biến hagravem hay một biểu thức con
1312 Chuacute thiacutech (comment) Chuacute thiacutech chỉ đơn thuần lagrave caacutec văn bản được sử dụng để giải thiacutech ghi chuacute trong chương
trigravenh Chuacuteng lagrave cocircng cụ để caacutec nhagrave phaacutet triển ldquogiao tiếprdquo với nhau (coacute khi lagrave với chiacutenh họ) chứ
khocircng phải với maacutey tiacutenh
Coacute nhiều caacutech để chuacute thiacutech trong C Viacute dụ
chuacute thiacutech trecircn nhiều dograveng chuacute thiacutech trecircn một dograveng chuacute thiacutech lặp lại chuacute thiacutech lặp lại chuacute thiacutech lặp lại Đặc biệt lagrave chuacute thiacutech dạng XML thường được sử dụng cho caacutec phương thức caacutec hagravem Viacute dụ ltsummarygt Returns the Square of the specified number ltsummarygt ltparam name = xgtThe number to squareltparamgt ltreturnsgtThe squared valueltreturnsgt static public double Square(double x)
return x x Vigrave C hỗ trợ cơ chế ldquogợi yacuterdquo khi gọi caacutec phương thức được chuacute thiacutech theo dạng nagravey
Viacute dụ Viết comment cho hagravem
Bước 1 Viết hagravem
static public dynamic CodeSnippetDemo(dynamic param1 dynamic param2)
return param1 + param2
Bước 2 Đặt con trỏ tại dograveng phiacutea trecircn tiecircu đề của hagravem gotilde Net sẽ tự động sinh comment
ltsummarygt
ltsummarygt
ltparam name=param1gtltparamgt
ltparam name=param2gtltparamgt
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 20 Version 11 ndash 032019
ltreturnsgtltreturnsgt
static public dynamic CodeSnippetDemo(dynamic param1 dynamic param2)
return param1 + param2
Bước 3 Viết nội dung cho comment
ltsummarygt
Demo CodeSnippet
ltsummarygt
ltparam name=param1gtTham số thứ 1ltparamgt ltparam name=param2gtTham số thứ 2ltparamgt
ltreturnsgtTrả về tổng 2 tham sốltreturnsgt
static public dynamic CodeSnippetDemo(dynamic param1 dynamic param2)
return param1 + param2
Bước 4 Gọi hagravem
14 Cấu truacutec điều kiện lựa chọn Trong quaacute trigravenh xử lyacute đocirci khi chuacuteng ta phải chọn 1 trong 2 hoặc nhiều cocircng việc Tugravey thuộc vagraveo
một điều kiện nagraveo đoacute C cung cấp cho chuacuteng ta caacutec cacircu lệnh if vagrave switch để thực hiện điều nagravey
141 Cacircu lệnh điều kiện if Cuacute phaacutep
if(conditional expression)
ltstatement1gt
else
ltstatement2gt
Sơ đồ khối
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 21
Caacutec viacute dụ
Viacute dụ 1 Hagravem sau đacircy trả về số lớn nhất trong 3 số magrave noacute nhận vagraveo
ltsummarygtTigravem số lớn nhất trong 3 sốltsummarygt ltparam name = xgtSố thứ nhấtltparamgt ltparam name = ygtSố thứ hailtparamgt ltparam name = zgtSố thứ baltparamgt ltreturnsgtSố lớn nhấtltreturnsgt static public double SoLonNhat(double x double y double z)
double max = x if (max gt y) max = y if (max gt z) max = z return max
Chuacute yacute Caacutec cacircu lệnh if coacute thể lồng nhau nhiều cấp
142 Cacircu lệnh lựa chọn switch Cacircu lệnh switch cung cấp một cấu truacutec điều khiển lựa chọn để thực hiện một cocircng việc nagraveo đoacute
dựa trecircn giaacute trị của biểu thức tại thời điểm run-time
Cuacute phaacutep
switch(Expression)
case lable_1 ltstatement_1gt
case lable_2 ltstatement_2gt
case lable_3 ltstatement_3gt
case lable_k ltstatement_kgt
[default ltstatement_k+1gt]
Sơ đồ khối
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 22 Version 11 ndash 032019
Caacutec viacute dụ
Viacute dụ 1 Hagravem sau đacircy sẽ tiacutenh số tiền khaacutech hagraveng phải trả khi thuecirc xe Dữ liệu đầu vagraveo lagrave số ngagravey
thuecirc n vagrave loại xe Mỗi loại xe coacute một giaacute thuecirc riecircng sử dụng cấu truacutec switch để xaacutec định giaacute thuecirc
xe dựa trecircn loại xe Nếu số ngagravey thuecirc lớn hơn 10 thigrave giảm giaacute thuecirc xe 10
ltsummarygtTiacutenh tiền thuecirc xeltsummarygt ltparam name = ngtSố ngagravey thuecircltparamgt ltparam name = loaigtLoại xeltparamgt ltreturnsgtSố tiền phải trảltreturnsgt static public double TienThueXe(int n string loai)
double gia = 0 switch (loaiToUpper())
case A gia = 1000000 break case B gia = 700000 break case C gia = 500000 break
if (n gt 10) gia = gia 09 return gia n
Viacute dụ 2 Đoạn matilde sau xaacutec định số ngagravey của thaacuteng bất kỳ trong năm 2000
int thang int soNgay ConsoleWrite(thang = ) thang = intParse(ConsoleReadLine()) switch (thang)
case 1 case 3 case 5 case 7 case 8 case 10 case 12 soNgay = 31 break case 4 case 6 case 9
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 23
case 11 soNgay = 30 break case 2 soNgay = 29 break default soNgay = 0 break
ConsoleWriteLine(so ngay = + soNgayToString())
Chuacute yacute
- Nhatilden default trong cấu truacutec switch lagrave tugravey chọn Nếu coacute khocircng coacute nhatilden nagraveo trước đoacute coacute
giaacute trị bằng với giaacute trị của biểu thức thigrave ltstatement_k+1gt sau nhatilden default sẽ được
thực hiện
- Coacute thể sử dụng break để thoaacutet khỏi cấu truacutec switch khi cần thiết (Xem viacute dụ 2 ở trecircn)
15 Cấu truacutec Lặp
151 Cacircu lệnh for Cuacute phaacutep
for(ltinitgtltconditiongtltincrementdecrementgt) ltstatement(s)gt
Sơ đồ khối
Caacutec viacute dụ
Viacute dụ 1 Tiacutenh tổng S = 1 + 2 + + n
class Program
static void Main(string[] args) int tong = 0 ConsoleWrite(n = ) int n = intParse(ConsoleReadLine()) for (int i = 1 i lt= n i++) tong += i tong = tong + i ConsoleWriteLine(tong = 0 tong)
Viacute dụ 2 Tiacutenh tổng caacutec phần tử dương trong mảng a
class Program
static void Main(string[] args) int tong = 0 khai baacuteo vagrave khởi tạo mảng a int[] a = 1 -23 6 7 3 -4 8 for (int i = 0 i lt aLength i++)
if(a[i] gt 0) tong += a[i] tong = tong + a[i] ConsoleWriteLine(Tong cac phan tu duong = 0 tong)
Tương tự Viacute dụ 2 chuacuteng ta coacute thể sử dụng break vagrave continue thay cho lệnh if
for (int i = 0 true i++)
if (i == aLength) breakthoaacutet for gần nhất if (a[i] lt= 0) continue
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 24 Version 11 ndash 032019
tong = tong + a[i]
Viacute dụ 3 Tiacutenh tổng S = 1 + 2 + + k
Caacutech 1 Sử dụng for lồng nhau
class Program
static void Main(string[] args)
int tong = 0 ConsoleWrite(n = ) int n = intParse(ConsoleReadLine()) for (int i = 1 i lt= n i++)
tiacutenh i giai thừa int giaiThua = 1 for (int j = 1 j lt= i j++)
giaiThua = j cộng vagraveo tổng tong += giaiThua
ConsoleWriteLine(Tong = 0 tong)
Caacutech 2 Cải tiến caacutech 1
Nhận xeacutet rằng tại bước lặp thứ i ở caacutech 1 chuacuteng ta đatilde tiacutenh lại i giai thừa bằng caacutech nhacircn từ 1
đến i Tuy nhiecircn trước đoacute tại bước i-1 chuacuteng ta đatilde tiacutenh i-1 giai thừa rồi Do vậy coacute thể tiacutenh i
giai thừa ngay bằng lệnh
giaiThua = giaiThua i
Chương trigravenh được sửa lại chỉ dugraveng 1 vograveng lặp for như sau
int giaiThua = 1 int tong = 0 for (int i = 1 i lt= n i++)
giaiThua = i tong += giaiThua
Chuacute yacute
- Coacute thể sử dụng break vagrave continue trong for (xem viacute dụ 3)
- Caacutec cacircu lệnh for coacute thể lồng nhau nhiều cấp
152 Cacircu lệnh while Trong caacutec ngocircn ngữ lập trigravenh while được xem lagrave cacircu lệnh lặp điều kiện trước Nghĩa lagrave trong khi
điều kiện cograven thỏa matilden thigrave khối lệnh trong thacircn while cograven tiếp tục được thực hiện
Cuacute phaacutep
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 25
while(conditional expression) ltstatement(s)gt
Sơ đồ khối
Caacutec viacute dụ
Viacute dụ 1 Hagravem sau đacircy sẽ đếm số chữ số của số nguyecircn n (với n lagrave tham số đầu vagraveo của hagravem)
public static int DemSoChuSo(int n)
int dem = 0
while (n gt 0)
++dem
n = n 10
return dem
Viacute dụ 2 Hagravem sau đacircy tiacutenh tổng caacutec số nguyecircn tố trong một mảng (số nguyecircn tố lagrave số chỉ chia
hết cho 1 vagrave chiacutenh noacute)
public static int TongCacSoNguyenTo(int[] a)
int tong = 0 int so int i = -1 while (true)
++i if (i == aLength) break kiểm tra xem a[i] coacute nguyecircn tố hay khocircng so = 2 while (a[i] so = 0) ++so nếu a[i] khocircng nguyecircn tố thi bỏ qua if (so lt a[i]) continue ngược lại thigrave cộng vagraveo tổng tong += a[i]
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 26 Version 11 ndash 032019
return tong
Chuacute yacute Chuacuteng ta cũng coacute thể sử dụng break vagrave continue trong lệnh while tương tự như ở
trong lệnh for
153 Cacircu lệnh do while Do while được gọi lagrave cacircu lệnh lặp điều kiện sau Nghĩa lagrave việc kiểm tra điều kiện chỉ được thực
hiện sau khi đatilde thực hiện khối lệnh ltstatement(s)gt sau do
Cuacute phaacutep
do ltstatement(s)gt While(conditional expression)
Sơ đồ khối
Caacutec viacute dụ
Viacute dụ 1 Chương trigravenh sau yecircu cầu người sử dụng nhập vagraveo một giaacute trị số Nếu khocircng đuacuteng lagrave
số thigrave yecircu cầu nhập lại
static void Main(string[] args)
int so
bool thanhCong
do
ConsoleWrite(Hay nhap vao mot so = )
thanhCong = intTryParse(ConsoleReadLine() out so)
if (thanhCong) ConsoleWriteLine(Gia tri khong hop le vui long nhap lai)
while (thanhCong)
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 27
ConsoleWrite(so ban da nhap = 0 so)
Chuacute yacute Tương tự như caacutec lệnh for vagrave while chuacuteng ta cũng coacute thể sử dụng break vagrave continue
trong lệnh do while
154 Cacircu lệnh For Each For Each lagrave một cấu truacutec lặp trong C For Each khaacutec với tất cả caacutec vograveng lặp khaacutec For
Each khocircng coacute điểm bắt đầu khocircng coacute điểm kết thuacutec cũng như khocircng coacute bước nhảy giữa caacutec
lần lặp For Each đơn giản lagrave duyệt từng phần tử coacute becircn trong mảng
Cấu truacutec
foreach (string name in arr) to do here
Viacute dụ
int[] fibarray = new int[] 0 1 1 2 3 5 8 13
foreach (int element in fibarray)
ConsoleWriteLine(element)
ConsoleWriteLine()
16 Return Break Continue Trong phần nagravey chuacuteng ta trigravenh bagravey rotilde thecircm về caacutec lệnh return break vagrave continue
Break cho pheacutep thoaacutet khỏi caacutec lệnh switch for while vagrave do while gần nhất
Continue bỏ qua việc thực hiện ltstatement(s)gt vagrave tiếp tục lặp với giaacute trị mới của biến lặp
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 28 Version 11 ndash 032019
Return lệnh nagravey sử dụng để trả về giaacute trị cho hagravem (trong trường hợp hagravem coacute kiểu void thigrave
khocircng cần lệnh return) vagrave kết thuacutec hagravem đoacute
Viacute dụ Hagravem Main sau đacircy sẽ tiacutenh vagrave in ra căn bậc 2 của một số thực
static void Main(string[] args)
double so ConsoleWrite(Hay nhap vao mot so = ) if (doubleTryParse(ConsoleReadLine() out so) == false)
ConsoleWriteLine(Gia tri ban nhap khong phai la so) return
if (so lt 0)
ConsoleWriteLine(Gia tri ban nhap lt 0) return
ConsoleWriteLine(Can bac 2 cua 0 = 1soMathSqrt(so)) return
17 Xử lyacute ngoại lệ (Exception)
171 Ngoại lệ lagrave gigrave Ngocircn ngữ C cũng cho pheacutep xử lyacute những lỗi vagrave caacutec điều kiện khocircng bigravenh thường với
những ngoại lệ Ngoại lệ lagrave một đối tượng đoacuteng goacutei những thocircng tin về sự cố của một chương
trigravenh khocircng bigravenh thường Chuacuteng ta phần chia caacutec ldquosự cốrdquo thagravenh bug lỗi vagrave ngoại lệ Một bug lagrave
một lỗi lập trigravenh coacute thể được sửa chữa trước khi matilde nguồn được chuyển giao Những ngoại lệ thigrave
khocircng được bảo vệ vagrave tương phản với những bug Mặc dugrave một bug coacute thể lagrave nguyecircn nhacircn sinh
ra ngoại lệ chuacuteng ta cũng khocircng dựa vagraveo những ngoại lệ để xử lyacute những bug trong chương trigravenh
tốt hơn lagrave chuacuteng ta necircn sửa chữa những bug nagravey
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 29
Lỗi gacircy ra coacute thể do lỗi của người sử dụng Viacute dụ người sử dụng nhập vagraveo một số nhưng
họ lại nhập vagraveo kyacute tự chữ caacutei Một lần nữa lỗi coacute thể lagravem xuất hiện ngoại lệ nhưng chuacuteng ta coacute
thể ngăn ngừa điều nagravey bằng caacutech bắt giữ lỗi với matilde hợp lệ Những lỗi coacute thể được đoaacuten trước
vagrave được ngăn ngừa Thậm chiacute nếu chuacuteng ta xoacutea tất cả những bug vagrave dự đoaacuten tất cả caacutec lỗi của
người dugraveng chuacuteng ta cũng coacute thể gặp phải những vấn đề khocircng mong đợi như lagrave xuất hiện
trạng thaacutei thiếu bộ nhớ (out of memory) thiếu tagravei nguyecircn hệ thống Những nguyecircn nhacircn nagravey
coacute thể do caacutec chương trigravenh khaacutec cugraveng hoạt động ảnh hưởng đến chuacuteng ta khocircng thể ngăn ngừa
caacutec ngoại lệ nagravey nhưng coacute thể xử lyacute chuacuteng để chuacuteng khocircng thể lagravem tổn hại đến chương trigravenh
Khi một chương trigravenh gặp một tigravenh huống ngoại lệ như lagrave thiếu bộ nhớ thigrave noacute sẽ tạo một
ngoại lệ Khi một ngoại lệ được tạo ra việc thực thi của caacutec chức năng hiện hagravenh sẽ bị treo cho
đến khi nagraveo việc xử lyacute ngoại lệ tương ứng được tigravem thấy Điều nagravey coacute nghĩa rằng nếu chức năng
hoạt động hiện hagravenh khocircng thực hiện việc xử lyacute ngoại lệ thigrave chức năng nagravey sẽ bị chấm dứt vagrave
hagravem gọi sẽ nhận sự thay đổi đến việc xử lyacute ngoại lệ Nếu hagravem gọi nagravey khocircng thực hiện việc xử
lyacute ngoại lệ ngoại lệ sẽ được xử lyacute sớm bởi CLR điều nagravey dẫn đến chương trigravenh của chuacuteng ta sẽ
kết thuacutec
Một trigravenh xử lyacute ngoại lệ lagrave một khối lệnh chương trigravenh được thiết kế xử lyacute caacutec ngoại lệ magrave
chương trigravenh phaacutet sinh Xử lyacute ngoại lệ được thực thi trong trong cacircu lệnh catch Một caacutech lyacute
tưởng thigrave nếu một ngoại lệ được bắt vagrave được xử lyacute thigrave chương trigravenh coacute thể sửa chữa được vấn
đề vagrave tiếp tục thực hiện hoạt động Thậm chiacute nếu chương trigravenh khocircng tiếp tục bằng việc bắt giữ
ngoại lệ chuacuteng ta coacute cơ hội để in ra những thocircng điệp coacute yacute nghĩa vagrave kết thuacutec chương trigravenh một
caacutech rotilde ragraveng
Nếu đoạn chương trigravenh của chuacuteng ta thực hiện magrave khocircng quan tacircm đến bất cứ ngoại lệ
nagraveo magrave chuacuteng ta coacute thể gặp (như khi giải phoacuteng tagravei nguyecircn magrave chương trigravenh được cấp phaacutet)
chuacuteng ta coacute thể đặt đoạn matilde nagravey trong khối finally khi đoacute noacute sẽ chắc chắn sẽ được thực hiện
thậm chiacute ngay cả khi coacute một ngoại lệ xuất hiện
172 Cấu truacutec cacircu lệnh try catch finally Để nắm rotilde caacutec bước xử lyacute ngoại lệ trong C bạn hatildey xem xeacutet cấu truacutec của lệnh try catch
finally sau đacircy (vagrave yacute nghĩa của từng phần)
try
caacutec lệnh coacute nguy cơ tạo ra ngoại lệ catch(Exception ex)
caacutec lệnh xử lyacute khi xảy ra ngoại lệ finally
caacutec lệnh sẽ thực hiện dugrave coacute ngoại lệ hay khocircng
173 Phaacutet sinh vagrave bắt giữ ngoại lệ Trong ngocircn ngữ C chuacuteng ta chỉ coacute thể phaacutet sinh (throw) những đối tượng caacutec kiểu dữ
liệu lagrave SystemException hay những đối tượng được dẫn xuất từ kiểu dữ liệu nagravey Namespace
System của CLR chứa một số caacutec kiểu dữ liệu xử lyacute ngoại lệ magrave chuacuteng ta coacute thể sử dụng trong
chương trigravenh Những kiểu dữ liệu ngoại lệ nagravey bao gồm ArgumentNullException
InValidCastException vagrave OverflowException cũng như nhiều lớp khaacutec nữa
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 30 Version 11 ndash 032019
174 Cacircu lệnh throw Để phaacutet tiacuten hiệu một sự khocircng bigravenh thường trong một lớp của ngocircn ngữ C chuacuteng ta
phaacutet sinh một ngoại lệ bằng caacutech sử dụng từ khoacutea throw Dograveng lệnh sau tạo ra một thể hiện mới
của SystemException vagrave sau đoacute throw noacute
throw new SystemException()
Khi phaacutet sinh ngoại lệ thigrave ngay tức khắc sẽ lagravem ngừng việc thực thi trong khi CLR sẽ tigravem
kiếm một trigravenh xử lyacute ngoại lệ Nếu một trigravenh xử lyacute ngoại lệ khocircng được tigravem thấy trong phương
thức hiện thời thigrave CLR tiếp tục tigravem trong phương thức gọi cho đến khi nagraveo tigravem thấy Nếu CLR trả
về lớp Main() magrave khocircng tigravem thấy bất cứ trigravenh xử lyacute ngoại lệ nagraveo thigrave noacute sẽ kết thuacutec chương trigravenh
Viacute dụ
static void Main(string[] args)
int tuoi try
ConsoleWrite(nhap tuoi cua ban = ) tuoi = intParse(ConsoleReadLine()) if (tuoi lt 0) throw new Exception(khong hop le vi tuoi lt 0) ConsoleWriteLine(tuoi = 0 tuoi) caacutec lệnh xử lyacute khi tuoigt0 sẽ được viết ở đacircy
catch(Exception ex)
ConsoleWriteLine(exMessage) finally
rỗng
175 Dẫn xuất một ngoại lệ Bước 1 Tạo ứng dụng mới
Bước 2 Viết matilde cho lớp MyException
using System using SystemCollectionsGeneric using SystemLinq using SystemText namespace ExceptionDemoMyClasses class MyExceptionException public MyException(string message) base(message)
Bước 3 Sử dụng lớp MyException
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 31
using System using SystemCollectionsGeneric using SystemLinq using SystemText using ExceptionDemoMyClasses namespace ExceptionDemo class Program static void Main(string[] args) double soTien try ConsoleWrite(nhap so tien = ) bool thanhCong = doubleTryParse(ConsoleReadLine()out soTien) if (thanhCong || soTien lt 0) throw new MyException(so tien khong hop le) ConsoleWrite(so tien da nhap = 0soTien) catch (MyException ex) ConsoleWriteLine(exMessage)
Bước 4 Kiểm thử chương trigravenh với 3 trường hợp (nhập số tiền = abc số tiền = -123 vagrave số tiền
= 456)
18 Caacutec bước Debug chương trigravenh Biecircn dịch chương trigravenh
- Caacutech 1 Gotilde phiacutem F6
- Caacutech 2 Gotilde tổ hợp phiacutem CTRL+SHIFT+B
- Caacutech 3 Vagraveo thực đơn Build chọn lệnh Build Solution
Debug chương trigravenh Gotilde phiacutem F5
Debug chương trigravenh từng bước Gotilde phiacutem F10
ĐặtXoacutea breakpoint F9
Viacute dụ
Bước 1 Tạo dự aacuten mới với caacutec hagravem sau
static void Main(string[] args)
int i tong = 0
for (i = 1 i lt 11 i++)tong += i
ConsoleWriteLine(tong = 0 tong)
Bước 2 Đặt breakpoint
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 32 Version 11 ndash 032019
Bước 3 Gotilde F10 để debug
Bước 4 Click phải chuột tại dograveng lệnh đatilde đặt breakpoint chọn Add Watch
Bước 5 Gotilde tecircn của đối tượng (biến) cần kiểm tra vao cửa sổ Watch
Chuacute yacute tại bước nagravey bạn coacute thể thecircm vagrave xoacutea caacutec đối tượng cần kiểm tra trong cửa sổ Watch
Bước 6 Tiếp tục gotilde F10 nhiều lần để quan saacutet giaacute trị của caacutec đối tượng cần kiểm tra
Bước 7 Gotilde SHIFT+F5 để dừng debug
Bước 8 Gotilde lại F9 để xoacutea breakpoint đatilde đặt
19 Hagravem (Function) 191 Định nghĩa
Hagravem lagrave đoạn chương trigravenh thực hiện trọn vẹn một cocircng việc nhất định Hagravem chia cắt việc
lớn bằng nhiều việc nhỏ giuacutep chương trigravenh saacuteng sủa dễ sửa lỗi dễ quản lyacute
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 33
192 Khai baacuteo
ltKiểu dữ liệu trả vềgt ltTecircn hagravemgt ([Danh saacutech tham số]) ltDanh saacutech caacutec lệnhgt
Trong đoacute
bull Kiểu dữ liệu trả về void float int double hellip hay kiểu người dugraveng định nghĩa
bull Tecircn hagravem do người dugraveng đặt thocircng thường đặt sao cho gợi nhớ về cocircng dụng của hagravem
(thường đặt theo Pascal Case)
bull Tham số coacute thể coacute hoặc khocircng Tham số nếu coacute lagrave caacutec biến coacute giaacute trị biến kết quả magrave
hagravem sử dụng
Viacute dụ 1 Hagravem output_hello dưới đacircy khocircng coacute tham số truyền vagraveo trả về kiểu string
static string output_hello() return Hello welcome to ASPNET class
Viacute dụ 2 Hagravem input khởi tạo giaacute trị cho mảng số nguyecircn khocircng coacute giaacute trị trả về (trả về null)
static void input(int[] a) khởi tạo ngẫu nhiecircn caacutec phần tử số nguyecircn Random rd = new Random() for (int i = 0 i lt aLength i++) a[i] = rdNext(100)
193 Lời gọi hagravem
bull Mục điacutech Yecircu cầu thực thi 1 taacutec vụ (hagravem) với dữ liệu cụ thể
bull Cuacute phaacutep gọi hagravem
Tecircn_hagravem (caacutec dữ liệu cho từng tham số)
bull Lưu yacute
o Cần truyền đủ số lượng vagrave đuacuteng kiểu tham số đatilde khai baacuteo khi gọi hagravem
o Coacute thể gọi hagravem lồng nhau
o Đối với hagravem coacute kết quả trả về lời gọi hagravem thường gaacuten kết quả cho biến hay đặt
trong biểu thức xử lyacute
o Đối với hagravem khocircng coacute kết quả trả về lời gọi hagravem nằm riecircng một dograveng lệnh
bull Viacute dụ
o Gọi hagravem khocircng truyền tham số string s = output_hello()
o Gọi hagravem coacute truyền tham số input(a)a lagrave mảng một chiều
194 Truyền tham số cho hagravem
1941 Dạng INT
Đacircy lagrave kiểu truyền tham số mặc định cho hagravem Thacircn hagravem chỉ tham khảo giaacute trị của
tham số magrave khocircng thay đổi giaacute trị của tham số
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 34 Version 11 ndash 032019
Viacute dụ Khai baacuteo vagrave định nghĩa hagravem
static int Tong(int n) int s = 0 for (int i = 1 i lt= n i++) s += i return s
Gọi hagravem
static void Main(string[] args) viacute dụ truyền tham số int n = 5 ConsoleWriteLine(Truoc khi goi ham n = 0 n) int s = Tong(n) ConsoleWriteLine(Sau khi goi ham n = 0 n)
Kết quả
1942 DẠNG OUT
bull Thacircn hagravem cấp phaacutetkhởi tạo giaacute trị của tham số (chỉ được gaacuten giaacute trị cho tham số)
bull Ra khỏi hagravem giaacute trị tham số thay đổi
bull Khi gọi hagravem thecircm chữ out vagraveo trước tecircn tham số
Viacute dụ
Khai baacuteo vagrave định nghĩa hagravem
static int Tong2(out int n)
int s = 0
for (int i = 1 i lt= 5 i++) s += i
n = 100
return s
Gọi hagravem
static void Main(string[] args)
viacute dụ truyền tham số
int n = 5
ConsoleWriteLine(Truoc khi goi ham n = 0 n)
int s = Tong2(out n)
ConsoleWriteLine(Sau khi goi ham n = 0 n)
Kết quả
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 35
1943 DẠNG REF
bull Ra khỏi hagravem giaacute trị tham số thay đổi
bull Được pheacutep thao taacutec đọcsửa giaacute trị của tham số
bull Khi gọi hagravem thecircm chữ ref vagraveo trước tecircn tham số
Viacute dụ
Khai baacuteo vagrave định nghĩa hagravem
static int Tong3(ref int n) int s = 0 for (int i = 1 i lt= n i++) s += i n = 100 return s
Gọi hagravem
static void Main(string[] args) viacute dụ truyền tham số int n = 5 ConsoleWriteLine(Truoc khi goi ham n = 0 n) int s = Tong3(ref n) ConsoleWriteLine(Sau khi goi ham n = 0 n)
Kết quả
1944 Optional Parameter ndash Tham số mặc định
bull Tham số mặc định dugraveng cho trường hợp khocircng truyền giaacute trị của tham số
Viacute dụ Hagravem Optional() becircn dưới coacute tham số truyền vagraveo kiểu string nếu khocircng truyền giaacute trị tham
số thigrave sẽ lấy giaacute trị mặc định (Test)
static void Main(string[] args) Optional() Optional(Another value) static void Optional(string Value=Test) ConsoleWriteLine(Value)
Kết quả
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 36 Version 11 ndash 032019
Another value
Test
bull Tham số mặc định phải truyền từ phải sang traacutei liecircn tục nhau
Viacute dụ
static void Optional2(string Value1=Test string Value2) ConsoleWriteLine(Value1 + Value2)
static void Optional3(string Value1=Test string Value2 string Value3=OK) ConsoleWriteLine(Value1 + Value2 + Value3)
Hagravem Optional2 Optional3 bắt buộc tham số Value2 phải lagrave tham số mặc định Ta sửa tham số
Value2 của Optional3 như sau
static void Optional3(string Value1 = Test string Value2 = is string Value3=OK) ConsoleWriteLine(Value1 + Value2 + Value3)
Thực hiện chương trigravenh với dữ liệu sau
static void Main(string[] args) Optional3(This program is very good) Optional3(This program is very) Optional3(This program ) Optional3()
Kết quả nhận được
1945 Named Parameter ndash Tham số được đặt tecircn
Sử dụng tham số được đặt tecircn lagravem chương trigravenh dễ đọc dễ trigravenh bagravey Bằng caacutech sử dụng tecircn
tham số chiacutenh thức chuacuteng ta coacute thể đổi thứ tự caacutec tham số thực tế
Viacute dụ sau đacircy sử dụng 4 caacutech gọi hagravem khaacutec nhau sử dụng tham số được đặt tecircn
class Program static void Main() Call the Test method several times in different ways
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 37
Test(name Perl size 5)Cach 1 Test(name Dot size -1)Cach 2 Test(6 Net)Cach 3 Test(7 name Google)Cach 4 static void Test(int size string name) ConsoleWriteLine(Size = 0 Name = 1 size name)
Output
Size = 5 Name = Perl
Size = -1 Name = Dot
Size = 6 Name = Net
Size = 7 Name = Google
Caacutech gọi 12 hoaacuten đổi vị triacute caacutec tham số
110 Mảng
1101 Giới thiệu mảng trong C
bull Mảng ndash thagravenh phần quan trọng trong cấu truacutec dữ liệu ndash lagrave tập hợp caacutec phần tử coacute cugraveng kiểu dữ liệu được truy xuất thocircng qua một tecircn duy nhất
bull Caacutec loại mảng mảng một chiều (One-Dimensional Array) mảng nhiều chiều (Multidimensional Array) vagrave mảng răng cưa (Jagged Array) Caacutec thuộc tiacutenh vagrave phương thức của mảng lagrave một thể hiện của lớp SystemArray
bull Khi chuacuteng ta tạo một mảng coacute kiểu dữ liệu giaacute trị mỗi thagravenh phần sẽ chứa giaacute trị mặc định của kiểu dữ liệu
Viacute dụ Với khai baacuteo int myIntArray = new int[5] thigrave
minus Mỗi thagravenh phần của mảng được thiết lập giaacute trị lagrave 0 (giaacute trị mặc định của số nguyecircn)
minus Những kiểu tham chiếu trong một mảng khocircng được khởi tạo giaacute trị mặc định chuacuteng được khởi tạo giaacute trị null
1102 Mảng 1 chiều
bull Chỉ số mảng bắt đầu từ 0 tức lagrave phần tử đầu tiecircn ở vị triacute 0 phần tử cuối cugraveng ở vị triacute ltsố_phần_tửgt - 1
bull Mảng coacute thể được khai baacuteo với kiacutech thước cố định (bị giới hạn bởi số lượng phần tử) hoặc động (coacute thể thay đổi kiacutech thước mảng tugravey tigravenh higravenh thực tế)
bull Mảng lagrave kiểu đối tượng (object) do đoacute sau khi khai baacuteo mảng cần tạo thể hiện của mảng bằng từ khoacutea new
kiểu dữ liệugt[] lttecircn mảnggt
Viacute dụ
double[] doubleArray = new double[5] char[] charArray = new char[5] bool[] boolArray = new bool[2]
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 38 Version 11 ndash 032019
string[] stringArray = new string[10]
bull Khởi tạo giaacute trị cho mảng
o Coacute thể khởi tạo ngay khi khai baacuteo vagrave tạo thể hiện
int[] staticIntArray = new int[3] 1 3 5 string[] strArray = new string[] Mahesh Chand Mike Gold Raj Beniwal Praveen Kumar Dinesh Beniwal
o Hoặc gaacuten trực tiếp từng giaacute trị cho mảng
int[] staticIntArray = new int[2] staticIntArray[0] = 1 staticIntArray[1] = 3
bull Truy xuất mảng Sử dụng toaacuten tử []
staticIntArray[0] = 1
11021 Một số thuộc tiacutenh vagrave phương thức thường dugraveng của lớp
SystemArray
Thagravenh viecircn Mocirc tả
Sort() Phương thức sắp xếp giaacute trị tăng dần trong mảng một chiều
Reverse() Phương thức sắp xếp giaacute trị giảm dần trong mảng một chiều
Length Thuộc tiacutenh chiều dagravei của mảng
SetValue() Phương thức thiết lập giaacute trị cho một thagravenh phần xaacutec định trong mảng
Rank Thuộc tiacutenh trả về số chiều của mảng
11022 Viacute dụ
Caacutec thao taacutec với mảng một chiều caacutec số nguyecircn tối đa 20 phần tử
static void XuatMang(int [] a) for (int i = 0 i lt aLength i++) ConsoleWrite(a[i] + ) ConsoleWriteLine() static void Main(string[] args) viacute dụ mảng 1 chiều khai baacuteo mảng 1 chiều tối đa 20 phần tử int[] a = new int[20] khởi tạo giaacute trị ngẫu nhiecircn cho mảng Random rd = new Random() for (int i = 0 i lt aLength i++) a[i] = rdNext(100) ConsoleWriteLine(XUAT MANG) XuatMang(a) ConsoleWriteLine(So chieu cua mang 0 aRank) ConsoleWriteLine(DAO NGUOC MANG) ArrayReverse(a) XuatMang(a) ConsoleWriteLine(MANG SAU KHI SAP TANG)
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 39
ArraySort(a) XuatMang(a) xoacutea mảng ConsoleWriteLine(MANG SAU KHI XOA GIA TRI) ArrayClear(a 0 aLength) XuatMang(a)
Kết quả chạy chương trigravenh
1103 Mảng nhiều chiều
bull Mảng nhiều chiều được biết đến như mảng higravenh chữ nhật với số chiều nhiều hơn 1
thường được gọi lagrave ma trận (matrix) Số lượng phần tử lagrave bằng nhau ở mỗi chiều
bull Khai baacuteo mảng
ltkiểu dữ liệugt[ ] lttecircn mảnggt
Viacute dụ
int[ ] myRectangularArray
bull Khởi tạo thagravenh phần của mảng
int[ ] myRectangularArray = new int[sodong socot] int[] numbers = new int[3 2] 1 2 3 4 5 6 string[] names = new string[2 2] Ros Amy Pet Albert
hoặc
int[] numbers = new int[] 1 2 3 4 5 6 string[] names = new string[] Rosy Amy Peter Albert
hoặc lagrave
int[] numbers = 1 2 3 4 5 6 string[] names = Rosy Amy Peter Albert
hoặc lagrave
int[] numbers = new int[3 2] numbers[0 0] = 1 numbers[1 0] = 2
numbers[2 0] = 3 numbers[0 1] = 4 numbers[1 1] = 5
numbers[2 1] = 6
bull Duyệt mảng 2 chiều
for (int i = 0 i lt sodong i++)
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 40 Version 11 ndash 032019
for (int j = 0 j lt socot j++) Xử lyacute numbers[ij]
1104 Mảng răng cưa
bull Lagrave mảng nhiều chiều nhưng số lượng phần tử ở mỗi chiều khaacutec nhau
bull Khai baacuteo mảng
ltkiểu dữ liệugt[ ][ ] lttecircn mảnggt
Viacute dụ Khai baacuteo mảng răng cưa 2 chiều coacute 3 dograveng
int[][] intJaggedArray = new int[3][]
bull Khởi tạo thagravenh phần của mảng
Viacute dụ Mảng răng cưa 2 chiều coacute 3 dograveng ứng với mỗi dograveng ta khởi tạo số lượng cột khaacutec nhau
intJaggedArray[0] = new int[2]
intJaggedArray[1] = new int[4]
intJaggedArray[2] = new int[6]
hoặc
intJaggedArray[0] = new int[2]2 12
intJaggedArray[1] = new int[4]4 14 24 34
intJaggedArray[2] = new int[6] 6 16 26 36 46 56
bull Duyệt mảng răng cưa
Viacute dụ duyệt mảng răng cưa 3 dograveng đatilde khai baacuteo vagrave khởi tạo ở trecircn
for (int i = 0 i lt intJaggedArrayLength i++) SystemConsoleWrite(Element (0) i) for (int j = 0 j lt intJaggedArray[i]Length j++)
SystemConsoleWrite(01 intJaggedArray[i][j] j == (intJaggedArray[i]Length - 1) )
SystemConsoleWriteLine()
Kết quả chạy chương trigravenh
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 41
111 Tập hợp - Collections
bull Lagrave cấu truacutec dữ liệu dugraveng để lưu trữ danh saacutech caacutec phần tử coacute kiểu dữ liệu khaacutec nhau
Số lượng phần tử khocircng hạn chế
bull Caacutec lớp nagravey nằm trong namespace SystemCollections hoặc SystemCollectionsGeneric
vagrave thường coacute chung một giao diện
1111 List
bull Phải chỉ định rotilde kiểu dữ liệu của từng phần tử
bull Khai baacuteo
Listltkiểu_dữ_liệugt lttecircn_biếngt = new Listltkiểu_dữ_liệugt ()
Viacute dụ
using System using SystemCollectionsGeneric class Program static void Main() Use the List type Listltstringgt list = new Listltstringgt() listAdd(cat) listAdd(dog) foreach (string element in list) ConsoleWriteLine(element)
Kết quả
cat dog
bull Truy xuất phần tử thocircng qua toaacuten tử [] Viacute dụ list[1]
bull Một số phương thức vagrave thuộc tiacutenh thường dugraveng
Thuộc tiacutenhPhương thức Yacute nghĩa
Capacity Trả về tổng số phần tử tối đa
Count Trả về số phần tử thật sự
Add(obj) Thecircm một phần tử kiểu obj
AddRange(arr_obj) Thecircm một mảng caacutec phần tử
Clear() Xoacutea tất cả phần tử
Contains(T) Xaacutec định danh saacutech coacute chứa phần tử T hay khocircng
Exist(lamda_expression) Kiểm tra coacute phần tử nagraveo thỏa matilden lamda expression hay khocircng (true hoặc false)
Find(lamda_expression) Kiểm tra coacute phần tử nagraveo thỏa matilden lamda expression hay khocircng (true hoặc false)
Insert(index T) Chegraven phần tử T vagraveo vị triacute index
InsertRange(index T_collection) Chegraven vagraveo vị triacute index danh saacutech caacutec phần tử
RemoveAll(lamda_expression) Xoacutea tất cả phần tử thotildea mản lamda expression
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 42 Version 11 ndash 032019
RemoveAt(index) Xoacutea phần tử tại vị triacute index
Sort() Sắp xếp caacutec phần tử
1112 ArrayList
bull Khocircng chỉ định rotilde kiểu dữ liệu của từng phần tử Do đoacute caacutec phần tử coacute thể coacute kiểu dữ
liệu khaacutec nhau
bull Khai baacuteo
ArrayList lttecircn_biếngt = new ArrayList()
Viacute dụ
using System using SystemCollectionsGeneric class Program static void Main() Use the ArrayList type ArrayList alist = new ArrayList() alistAdd(cat) alistAdd(1999) alistAdd(dog) for (int i=0 i lt alistCount i++) ConsoleWriteLine(alist[i]ToString())
Kết quả
cat
1999
dog
bull Truy xuất phần tử thocircng qua toaacuten tử [] chuacute yacute eacutep kiểu nếu cần
Viacute dụ (int) alist[1]
bull Một số phương thức vagrave thuộc tiacutenh thường dugraveng
Thuộc tiacutenhPhương thức Yacute nghĩa
Capacity Trả về tổng số phần tử tối đa coacute thể chứa
Count Trả về số phần tử thật sự
Add() Thecircm một phần tử kiểu obj vagraveo cuối ArrayList
AddRange(arr_obj) Thecircm một mảng caacutec phần tử vagraveo cuối ArrayList
Clear() Xoacutea tất cả phần tử
Contains(T) Xaacutec định phần tử T coacute nằm trong ArrayList hay khocircng
Exist(lamda_expression) Kiểm tra coacute phần tử nagraveo thỏa mản lamda expression hay khocircng (true hoặc false)
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 43
Find(lamda_expression) Kiểm tra coacute phần tử nagraveo thỏa mản lamda expression hay khocircng (true hoặc false)
Insert(index T) Chegraven phần tử T vagraveo vị triacute index
InsertRange(index T_collection) Chegraven vagraveo vị triacute index danh saacutech caacutec phần tử
Remove() Xoacutea phần tử đầu tiecircn trong ArrayList
RemoveAll(lamda_expression) Xoacutea tất cả phần tử thotildea mản lamda expression
RemoveAt(index) Xoacutea phần tử tại vị triacute index
Reverse() Đảo ngược thứ tự caacutec phần tử
Sort() Sắp xếp caacutec phần tử
1113 Hashtable
bull Hashtable lagrave kiểu từ điển mỗi phần tử bao gồm 1 cặp [key-value] Hashtable khocircng cần
khai baacuteo kiểu dữ liệu cho key value
bull Hashtable dugraveng tối ưu cho việc truy xuất nhanh Caacutec cặp key lagrave khocircng trugraveng nhau
bull Khai baacuteo
Hashtable lttecircn_biếngt = new Hashtable()
Viacute dụ
using System using SystemCollectionsGeneric class Program static void Main() Hashtable ht = new Hashtable() htAdd(pet cat) htAdd(1 1999) htAdd(nick mylovepet) for (DictionaryEntry de in ht) ConsoleWriteLine(0 --gt 1 deKey deValue)
Kết quả
cat
dog
bull Truy xuất phần tử thocircng qua toaacuten tử [] chuacute yacute eacutep kiểu nếu cần
Viacute dụ (int) ht[1]
bull Một số phương thức vagrave thuộc tiacutenh thường dugraveng
Thuộc tiacutenhPhương thức Yacute nghĩa
Count Trả về số phần tử coacute trong Hashtable
Keys Tập hợp caacutec khoacutea
Values Tập hợp caacutec giaacute trị ứng với khoacutea
Add(key value) Thecircm một phần tử với key value xaacutec định
Clear() Xoacutea tất cả phần tử bao gồm cả key value
Contains(T) Xaacutec định phần tử T coacute nằm trong Hashtable hay khocircng
ContainsKey(k) Xaacutec định coacute phần tử nagraveo trong Hashtable coacute khoacutea k
ContainsValues(v) Xaacutec định coacute phần tử nagraveo trong Hashtable coacute giaacute trị lagrave v
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 44 Version 11 ndash 032019
Remove(key) Xoacutea phần tử coacute khoacutea key
112 Khaacutei niệm lớp (Class) amp Đối tượng (Object)
1121 Lớp Lớp lagrave một khaacutei niệm mocirc tả cho những thực thể coacute chung tiacutenh chất vagrave hagravenh vi lagrave một khuocircn
mẫu cho caacutec đối tượng
Lớp đối tượng lagrave một cấu truacutec dữ liệu linh hoạt coacute thể lưu trữ dữ liệu vagrave thực thi hagravenh động bao
gồm hai thagravenh phần sau
minus Thagravenh phần thuộc tiacutenh (dữ liệu) bao gồm caacutec thocircng tin liecircn quan đến lớp
minus Thagravenh phần phương thức (hagravenh động) bao gồm caacutec hagravenh động liecircn quan đến lớp đoacute
Mỗi lớp đối tượng coacute thể coacute nhiều thuộc tiacutenh vagrave nhiều phương thức
Khai baacuteo lớp bằng caacutech sử dụng từ khoaacute class Cuacute phaacutep đầy đủ như sau
[Thuộc tiacutenh] [Bổ sung truy cập] class ltTecircn lớpgt [ Lớp cơ sở]
Caacutec thuộc tiacutenh ltThuộc tiacutenhgt Caacutec phương thức ltPhương thứcgt
Viacute dụ Khai baacuteo lớp Diem biểu diễn thocircng tin một điểm trong mặt phẳng Oxy
class Diem
Cac thuoc tinh
private int x x viet thuong private int y y viet thuong
Cac phuong thuc public override string ToString() Xuat
return ( + x + + y + )
1122 Đối tượng Đối tượng lagrave những đại diện cho lớp mọi đối tượng đều coacute chung tiacutenh chất vagrave hagravenh vi magrave lớp
định nghĩa
Viacute dụ Khai baacuteo đối tượng dinhA ndash lagrave thể hiện của lớp Diem đatilde định nghĩa ở trecircn
Diem dinhA = new Diem()
Sau khi khai baacuteo đối tượng dinhA coacute đầy đủ caacutec thuộc tiacutenh vagrave phương thức của lớp Diem
1123 Thuộc tiacutenh (Field)
Fields lagrave caacutec phần tử dugraveng để thể hiện caacutec biến trong lớp
Fields lagrave những thocircng tin coacute thể thay đổi được
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 45
1124 Phương thức (Method)
Phương thức (method) chiacutenh lagrave caacutec hagravem (function) được tạo trong lớp (class)
Tecircn của phương thức thường được đặt theo tecircn của hagravenh động
1125 Bảng tầm vực thuộc tiacutenh truy cập Thuộc tiacutenh Giới hạn truy cập
public Khocircng hạn chế Những thagravenh viecircn được đaacutenh dấu public coacute thể được dugraveng bất kỳ caacutec phương thức của lớp bao gồm cả những lớp khaacutec
private Thagravenh viecircn trong lớp được đaacutenh dấu private chỉ được dugraveng caacutec phương thức của lớp nagravey magrave thocirci
protected Thagravenh viecircn trong lớp được đaacutenh dấu protected chỉ được dugraveng caacutec phương thức của lớp nagravey vagrave caacutec phương thức của lớp dẫn xuất từ lớp nagravey
internal Thagravenh viecircn trong lớp được đaacutenh dấu lagrave internal được dugraveng caacutec phương thức của bất kỳ lớp nagraveo cugraveng khối hợp ngữ với lớp nagravey
protected internal Thagravenh viecircn trong lớp được đaacutenh dấu lagrave protected internal được dugraveng caacutec phương thức của lớp nagravey caacutec phương thức của lớp dẫn xuất từ lớp nagravey vagrave caacutec phương thức của bất kỳ lớp nagraveo trong cugraveng khối hợp ngữ với lớp nagravey
private thigrave thuộc tiacutenhphương thức đoacute chỉ được sử dụng trực tiếp becircn trong lớp đoacute
public thigrave thuộc tiacutenhphương thức đoacute coacute thể được sử dụng trực tiếp becircn trong lớp lẫn
becircn ngoagravei lớp
1126 Constructor
bull Constructor lagrave phương thức đặc biệt của lớp được gọi thực hiện khi lớp được tạo ra
bull Constructors coacute tecircn giống như tecircn của Class
bull Constructors khocircng coacute giaacute trị trả về
bull Viacute dụ Một số hagravem constructor cho lớp Diem Cac phuong thuc khoi tao public Diem() x = 0 y = 0 public Diem(int xx int yy) x = xx y = yy public Diem(Diem p) X = pX Y = pY
Sử dụng hagravem constructor
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 46 Version 11 ndash 032019
Diem dinhA = new Diem()
Diem dinhB = new Diem(5 5)
Diem dinhC = new Diem(dinhB)
1127 Object Initialize Khởi tạo đối tượng kiểu object Initialize gồm coacute 3 caacutech sau
ndash Caacutech thocircng thường Khởi tạo caacutec đối tượng sau đoacute gaacuten caacutec thuộc tiacutenh
Viacute dụ
Diem dinhA = new Diem()
dinhAX = 10
dinhAY = 10
ndash Gaacuten caacutec thuộc tiacutenh ngay khi khởi tạo đối tượng
Viacute dụ
Diem dinhB = new Diem() X = 10 Y = 20
ndash Khởi tạo đối tượng với kiểu anonymous
Viacute dụ
var dinhC = new X = 9 Y = 11
1128 Properties Properties lagrave phần tử dugraveng để cập nhật vagrave truy xuất đến đặc điểm của một đối tượng ndash field ớ
mức private Properties được định nghĩa bằng 2 phần phần thứ nhất giống như định nghĩa Fields
phần thứ 2 coacute thecircm 2 phần tử get vagrave set
Viacute dụ Property cho thuộc tiacutenh hoagravenh độ x trong lớp Diem
class Diem
Cac thuoc tinh
private int x x viet thuong private int y y viet thuong
Cac phuong thuc Properties public int X X viet hoa
get return x x viet thuong
set x = value x viet thuong
1129 Automatic Properties Để đơn giản hoacutea việc định nghĩa caacutec getset giống nhau ở caacutec properties automatic
properties cho pheacutep người dugraveng khai baacuteo một caacutech chung chung get set Thay vagraveo đoacute trigravenh
biecircn dịch coacute thể tự động tạo ra caacutec private field vagrave những thao taacutec getset mặc định cho chuacuteng
Viacute dụ
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 47
public class HangHoa
public string MaHang get set
public string TenHang get set
public int SoLuong get set
11210 Từ khoacutea static bull Caacutec thagravenh viecircn (biến phương thức) tĩnh (static) cho pheacutep chuacuteng ta truy cập trực tiếp magrave
khocircng cần phải tạo thể hiện (đối tượng) của lớp
bull Mọi thao taacutec truy xuất thocircng qua tecircn class
bull Static member
o Dữ liệu thuộc mức lớp
o Độc lập với caacutec đối tượng
o Chỉ coacute một thể hiện (instance) duy nhất
o Dữ liệu được cấp phaacutet khi chương trigravenh bắt đầu chạy
bull Static method
o Chỉ sử dụng được biến static
Viacute dụ
class StaticClass static member static int count static method public static void Print() ConsoleWrite(Count = + count)
Khai baacuteo sử dụng hagravem print()
StaticClassPrint()
11211 Phương thức mở rộng bull Extension Methods (phương thức mở rộng) lagrave phương thức được viết thecircm vagraveo một class
static hiện coacute magrave khocircng cần một cấp thừa kế biecircn dịch lại hoặc sửa đổi matilde nguồn gốc
Extension Methods được viết dưới dạng hagravem tĩnh (static) tức lagrave bạn sẽ gọi hagravem nagravey magrave
khocircng cần phải khởi tạo một đối tượng
bull Khai baacuteo phương thức mở rộng
public static ltkiểu trả về hagravemgt tecircn_hagravem (this ltkiểu_đối_tượng mở_rộnggt tecircn_đối_tượng)
Nội dung hagravem
Viacute dụ Cagravei đặt phương thức đổi sang chữ hoa chuỗi cho trước lagrave phương thức được thecircm vagraveo
lớp string đatilde coacute
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 48 Version 11 ndash 032019
static class Program public static string doisangchuhoa(this string s) return sToUpper() static void Main(string[] args) string s = Hello eVery body ConsoleWrite(sdoisangchuhoa())
11212 Kiểu Anonymous Type Anonymmous Type - kiểu dữ liệu trừu tượng - được dugraveng khi khai baacuteo đối tượng chưa xaacutec định
được kiểu Kiểu dữ liệu của biến sẽ được xaacutec định khi gaacuten giaacute trị cụ thể cho biến
static void Main(string[] args)
var a1 = new Item100 = 1234 Item200 = Hello World Item300 = true
ConsoleWriteLine(a1Item100 2) 246
ConsoleWriteLine(a1Item200ToUpper()) HELLO WORLD
ConsoleWriteLine(a1Item300 One Two) One
113 Bagravei tập NHẬP XUẤT CƠ BẢN
1 Viết chương trigravenh nhập vagraveo hai số thực dương chỉ chiều dagravei vagrave chiều rộng của higravenh chữ nhật
Xuất ra magraven higravenh chu vi vagrave diện tiacutech higravenh chữ nhật đoacute
2 Viết chương trigravenh nhập vagraveo độ dagravei cạnh của higravenh vuocircng Xuất ra magraven higravenh chu vi vagrave diện tiacutech
higravenh vuocircng đoacute
3 Viết chương trigravenh nhập vagraveo baacuten kiacutenh của higravenh trograven Xuất ra magraven higravenh chu vi vagrave diện tiacutech higravenh
trograven đoacute
4 Viết chương trigravenh nhập vagraveo họ tecircn (HoTen) điểm toaacuten (Toan) điểm lyacute (Ly) điểm hoacutea (Hoa)
của một sinh viecircn In ra magraven higravenh họ tecircn (dạng chữ HOA) điểm trung bigravenh (DTB) lấy hai số
thập phacircn của sinh viecircn theo cocircng thức DTB = (Toan 2 + Ly + Hoa)4
5 Viết chương trigravenh nhập vagraveo họ tecircn năm sinh một người bất kỳ Sau đoacute in ra magraven higravenh caacutec
kết quả sau họ tecircn năm sinh tuổi hiện tại vagrave tuổi ở năm 2020 của họ (Sử dụng
DateTimeNow lấy ngagravey giờ hiện tại)
6 Nhập vagraveo 1 số thực x bất kỳ xuất ra kết quả của đa thức Y = 3x2 + 4x ndash 7
IF hellip ELSE
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 49
7 Giải phương trigravenh bậc 2 (ax2 + bx + c = 0)
Nhập vagraveo caacutec hệ số a b vagrave c
Biện luận vagrave giải phương trigravenh
o Vocirc nghiệm (Delta lt 0)
o Nghiệm keacutep (Delta=0)
o 2 Nghiệm phacircn biệt (Delta gt 0)
Hướng dẫn
o double delta = bb ndash 4ac
o X1 = (-b + Mathsqrt(delta))(2a)
o X2 = (-b - Mathsqrt(delta))(2a)
8 Viết chương trigravenh nhập vagraveo một số nguyecircn dương chỉ năm cho biết năm đoacute coacute lagrave năm
nhuận hay khocircng
Hướng dẫn o Năm nhuận (lagrave năm coacute 366 ngagravey thaacuteng 2 coacute 29 ngagravey) lagrave năm chia hết cho 4 nếu năm
chia hết cho 100 thigrave năm đoacute phải chia hết cho 400 Thuật giải
Nếu nam 400 == 0 thigrave
Năm nhuận
Ngược lại nếu (nam 4 == 0) vagrave (nam 100 = 0) thigrave
Năm nhuận
Ngược lại
Năm thường
9 Nhập vagraveo độ dagravei 3 cạnh của một tam giaacutec Xuất ra thocircng baacuteo tam giaacutec vuocircng (bigravenh phương
một cạnh bằng tổng bigravenh phương 2 cạnh cograven lại) tam giaacutec cacircn (hai cạnh bằng nhau) tam
giaacutec đều (ba cạnh bằng nhau) tam giaacutec thường hoặc bộ ba số khocircng hợp lệ
10 Nhập vagraveo tiền thực latildenh của thaacuteng (năm) vagrave số người phụ thuộc tiacutenh thuế thu nhập caacute nhacircn
phải nộp theo luật thuế aacutep dụng từ thaacuteng 7 năm 2013 như sau
Bậc thuế Phần thu nhập tiacutenh
thuếnăm (tr đồng)
Phần thu nhập tiacutenh
thuếthaacuteng (tr đồng)
Thuế suất
()
1 Đến 60 Đến 5 5
2 Trecircn 60 đến 120 Trecircn 5 đến 10 10
3 Trecircn 120 đến 216 Trecircn 10 đến 18 15
4 Trecircn 216 đến 384 Trecircn 18 đến 32 20
5 Trecircn 384 đến 624 Trecircn 32 đến 52 25
6 Trecircn 624 đến 960 Trecircn 52 đến 80 30
7 Trecircn 960 Trecircn 80 35
Giảm trừ gia cảnh mỗi người 09 triệuthaacuteng vagrave mỗi người phụ thuộc 36 triệuthaacuteng
SWITCH hellip CASE
11 Tiacutenh số tiền khaacutech hagraveng phải trả khi thuecirc xe Dữ liệu đầu vagraveo lagrave số ngagravey thuecirc xe vagrave loại xe
Mỗi loại xe coacute một giaacute thuecirc riecircng loại A 1000000 đngagravey loại B 700000 đngagravey loại C
500000 đngagravey Nếu số ngagravey thuecirc lớn hơn 10 thigrave giảm giaacute thuecirc xe 10
LẶP (FOR WHILEhellip)
12 Viết chương trigravenh nhập số N sau đoacute tiacutenh caacutec tổng sau
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 50 Version 11 ndash 032019
a S1 = 1 + 2 + 3 ++ N b S2 = 1 +12+13++1N c S3 = 11 +22+33+ +NN d S4 = 123N e S5 = 1 + 12 + 13 + + 1N (trong đoacute N = 123 hellip N) f S6 = 1(12) + 1(23) + 1(34) + + 1(N(N+1))
13 Nhập vagraveo số nguyecircn dương N lt= 150 In ra giaacute trị bigravenh phương caacutec số từ 1 đến N
14 Nhập vagraveo một số nguyecircn xuất ra số chữ số vagrave tổng caacutec chữ số của noacute
VD Nhập vagraveo 123456 xuất ra 6 vagrave 21 (1 + 2 + 3 + 4 + 5 + 6 = 21)
HAgraveM
15 Viết chương trigravenh thực hiện chức năng nhập vagraveo 1 số nguyecircn từ n bagraven phiacutem (n gt 20) sau
đoacute tiacutenh tổng x (x được nhập từ bagraven phiacutem) caacutec số chẳn đầu tiecircn từ 1 -gt n Nếu người nhập
n lt 20 thigrave thocircng baacuteo nhập lại
bull Viết hagravem nhập vagrave kiểm tra số nguyecircn n
bull Viết hagravem tiacutenh tổng caacutec số chẵn
HƯỚNG DẪN - GỢI Yacute
Bước 1 Thiết kế hagravem nhập vagrave kiểm tra n gt 20 Chuacute yacute kiểu truyền tham số cho hagravem static void nhap(out int n) int x while(true) ConsoleWriteLine(Nhap vao so nguyen) x = intParse(ConsoleReadLine()) if (x gt 20) break ConsoleWriteLine(Vui long nhap n gt 20) n = x
Bước 2 Thiết kế hagravem tiacutenh tổng caacutec số chẵn từ 1 đến n
static int tongsochan(int n) int s = 0 for (int i = 1 i lt= n i++) if (i 2 == 0) s += i return s
Bước 3 Thực hiện gọi hagravem
static void Main(string[] args) int n nhap(out n) ConsoleWriteLine(Tong cac so chan tu 1 den 0 la 1 n tongsochan(n))
Kết quả magraven higravenh chạy với dữ liệu nhập vagraveo lần lượt lagrave 1 19 21
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 51
Bước 4 Tinh chỉnh hagravem tiacutenh tổng
static int tongsochan2(int n) int s = 0 for (int i = 2 i lt= n i+=2) s += i return s
16 Viết chương trigravenh đếm xem coacute bao nhiecircu nguyecircn tố từ x ndashgt y với x y lagrave 2 số nguyecircn được
nhập từ bagraven phiacutem
bull Viết hagravem nhập số nguyecircn bull Viết hagravem kiểm tra số nguyecircn tố
bull Viết hagravem đếm số nguyecircn tố
MẢNG
17 Khai baacuteo mảng một chiều caacutec số nguyecircn tối đa 100 phần tử Viết chương trigravenh
minus Viết hagravem nhập vagraveo giaacute trị cho caacutec phần tử trong mảng
minus Viết hagravem xuất mảng 1 chiều caacutec số nguyecircn
minus Viết hagravem tiacutenh tổng caacutec phần tử trong mảng
minus Viết hagravem tigravem số lớn nhất số nhỏ nhất trong mảng 1 chiều
minus Viết hagravem đếm số lượng số nguyecircn dương chẵn coacute trong mảng
minus Viết hagravem xuất giaacute trị tổng trung bigravenh cộng caacutec giaacute trị của caacutec phần tử trong mảng
minus Viết hagravem main thực hiện caacutec yecircu cầu trecircn
18 Khai baacuteo 1 mảng nguyecircn 2 chiều 4 dograveng 5 cột Viết chương trigravenh
minus Nhập giaacute trị cho caacutec phần tử trong mảng (giaacute trị = số thứ tự dograveng + số thứ tự cột)
minus In giaacute trị caacutec phần tử trong mảng
minus In giaacute trị lớn nhất giaacute trị nhỏ nhất của caacutec phần tử trong mảng
minus In tổng số caacutec giaacute trị trung bigravenh cộng caacutec giaacute trị của caacutec phần tử trong mảng
minus Viết hagravem thực hiện sắp xếp caacutec phần tử trong mảng tăng dần (từ traacutei sang phải tử trecircn
xuống dưới)
minus Viết hagravem tigravem phần tử x coacute trong mảng hay khocircng nếu tigravem thấy xuất thocircng baacuteo
minus Viết hagravem thực hiện tiacutenh tổng caacutec phần tử trecircn đường cheacuteo chiacutenh của mảng a (những
phần tử coacute vị triacute dograveng = vị triacute cột)
minus Viết hagravem thực hiện sắp xếp caacutec phần tử trecircn dograveng chẵn tăng dần vagrave dograveng lẽ giảm dần
19 Viết 1 ứng dụng Console thực hiện caacutec chức năng sau với List
minus Nhập caacutec phần tử kiểu chuổi từ bagraven phiacutem thecircm vagraveo List khi nagraveo người dugraveng nhập vagraveo
chuổi ldquostoprdquo thigrave ngừng Sau đoacute xuất caacutec phần tử ra magraven higravenh
minus Tigravem phần tử trả về true nếu tigravem thấy ngược lại trả về false
minus Xoacutea một phần tử
minus Thecircm 1 phần tử vagraveo vị triacute index bất kỳ với index nhập từ bagraven phiacutem
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 52 Version 11 ndash 032019
HƯỚNG ĐỐI TƯỢNG
20 Thao taacutec lớp cơ bản
Tạo ứng dụng Console thecircm vagraveo 1 class tecircn HocVien bao gồm caacutec thagravenh phần dữ liệu MaHV
HoTen NgaySinh DiaChi DienThoai
minus Khai baacuteo vagrave định nghĩa caacutec Constructor tham số vagrave khocircng tham số minus Khai baacuteo vagrave định nghĩa caacutec properties để truy cập đến giaacute trị của caacutec thagravenh phần dữ vagrave viết
thecircm 1 properties chỉ đọc (get) dugraveng để lấy LayTuoi của HocVien minus Viết hagravem Main() để kiểm tra lớp trecircn
21 Quản lyacute Higravenh học
Tạo ứng dụng Console thực hiện caacutec yecircu cầu sau
minus Thecircm vagraveo 1 class HinhHoc gồm caacutec thagravenh phần biểu diễn diện tiacutech (mDienTich) vagrave chu vi
(mChuVi) Viết phương thức để xuất giaacute trị của mDienTich vagrave mChuVi ra magraven higravenh
minus Thecircm vagraveo 1 class HinhChuNhat kế thừa từ lớp HinhHoc biểu diễn thocircng tin higravenh chữ nhật bao gồm thuộc tiacutenh riecircng của noacute lagrave mChieuDai mChieuRong
bull Khai baacuteo thagravenh phần dữ liệu cần thiết để biểu diễn higravenh chữ nhật bull Khai baacuteo vagrave định nghĩa caacutec contructor cần thiết bull Khai baacuteo vagrave định nghĩa caacutec properties để truy cập đến giaacute trị của caacutec thagravenh phần dữ
liệu mChieuDai va mChieuRong (get set) bull Viết 2 phương thức tiacutenh diện tiacutech higravenh chữ nhật (mChieuDai x mChieuRong) vagrave chu vi
(mChieuDai+mChieuRong) x 2 kết quả gaacuten vagraveo thuộc tiacutenh mDienTich mChuVi minus Thecircm 1 lớp tecircn HinhTron kế thừa từ lớp HinhHoc vagrave viết thecircm caacutec thagravenh phần sau
bull Khai baacuteo thecircm caacutec thagravenh dữ liệu mBanKinh
bull Khai baacuteo vagrave định nghĩa caacutec Constructor tham số vagrave khocircng tham số để khởi tạo caacutec giaacute
trị cho caacutec thagravenh phần dữ liệu
bull Khai baacuteo vagrave định nghĩa caacutec properties để truy cập đến giaacute trị của caacutec thagravenh phần dữ
liệu (get set)
bull Viết caacutec phương thức tiacutenh chu vi vagrave diện tiacutech higravenh trograven (caacutech viết giống như lớp higravenh
chữ nhật)
minus Viết hagravem Main() để kiểm tra caacutec caacutec constructor caacutec properties caacutec phương thức của caacutec lớp trecircn
22 Quản lyacute Nhacircn viecircn
Tạo 1 ứng dụng Console thực hiện caacutec yecircu cầu sau
minus Thecircm vagraveo 1 class tecircn Nguoi bao gồm caacutec thagravenh phần dữ liệu HoTen NgaySinh DiaChi
bull Khai baacuteo vagrave định nghĩa caacutec constructor tham số vagrave khocircng tham số
bull Khai baacuteo vagrave định nghĩa caacutec properties để truy cập đến giaacute trị của caacutec thagravenh phần dữ
liệu (get set) vagrave viết thecircm 1 properties chỉ đọc (get) dugraveng để lấy LayTuoi của Nguoi
bull Viết 1 phương thức tecircn XemThongTin() xuất giaacute trị caacutec thagravenh phần dữ liệu ra magraven
higravenh
minus Thecircm 1 lớp tecircn SinhVien kế thừa từ lớp Nguoi vagrave viết thecircm caacutec thagravenh phần sau
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 53
bull Khai baacuteo thecircm caacutec thagravenh dữ liệu string MaSV string MaLop string Email string
DienThoai
bull Khai baacuteo vagrave định nghĩa caacutec Constructor tham số vagrave khocircng tham số để khởi tạo caacutec giaacute
trị cho caacutec thagravenh phần dữ liệu
bull Khai baacuteo vagrave định nghĩa caacutec properties để truy cập đến giaacute trị của caacutec thagravenh phần dữ
liệu (get set) kiểm tra dữ liệu
minus Thecircm 1 lớp tecircn NhanVien kế thừa từ lớp Nguoi vagrave viết thecircm caacutec thagravenh phần sau
bull Khai baacuteo thecircm caacutec thagravenh dữ liệu string MaNhanVien string Email string DienThoai
DateTime NgayLamViec string MaCongTy
bull Khai baacuteo vagrave định nghĩa caacutec Constructor tham số vagrave khocircng tham số để khởi tạo caacutec giaacute
trị cho caacutec thagravenh phần dữ liệu
bull Khai baacuteo vagrave định nghĩa caacutec properties để truy cập đến giaacute trị của caacutec thagravenh phần dữ
liệu (get set) vagrave kiểm tra dữ liệu
minus Viết hagravem Main() để kiểm tra caacutec caacutec constructor caacutec properties caacutec phương thức của caacutec
lớp trecircn
minus Mở rộng thecircm cho caacutec đối tượng khaacutec như GiamDoc CaSi Tất cả caacutec lớp necircn override lại
phương thức ToString()
minus Sử dụng List để khai baacuteo mảng caacutec đối tượng
ListltNguoigt ds = new ListltNguoigt()
dsAdd(new SinhVien)
dsAdd(new NhanVien)
dsAdd(new Nguoi)
dsAdd(new SinhVien)
duyệt danh saacutech
-----------------------------------------------------oOo-------------------------------------------------
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 54 Version 11 ndash 032019
THIẾT KẾ GIAO DIỆN WEB
21 Ngocircn ngữ HTML
211 Một số khaacutei niệm
a) Trang web Trang web (tĩnh) lagrave một file dạng text chứa dữ liệu vagrave caacutec tag HTML Khi
hiển thị trong trigravenh duyệt web dữ liệu sẽ được hiển thị theo quy định của caacutec tag magrave noacute
nằm becircn trong Dữ liệu trong trang web coacute thể lagrave văn bản higravenh ảnh acircm thanh video
b) Hyperlink lagrave 1 liecircn kết chỉ đến 1 trang web khaacutec Một trang web coacute thể chứa nhiều link
c) Website Lagrave tập hợp nhiều trang web thể hiện thocircng tin của 1 tổ chức 1 chủ đề nagraveo đoacute
Mỗi website coacute 1 trang trang chủ chứa caacutec hyperlink liecircn kết đến caacutec trang khaacutec trong
website Người xem sẽ vagraveo website bắt đầu từ trang chủ từ trang nagravey nhờ caacutec link trong
đoacute magrave họ sẽ đến được caacutec trang khaacutec trong toagraven website
d) Browser Lagrave chương trigravenh dugraveng để xem caacutec trang web Caacutec trigravenh duyệt web nổi tiếng lagrave
FireFox Google Chrome Microsoft Edge
e) WebServer Lagrave caacutec maacutey ldquophục vụ webrdquo đacircy lagrave caacutec maacutey tiacutenh trecircn InternetIntranet coacute cagravei
chương trigravenh webserver Webserver sẽ trả về cho người sử dụng trang web magrave họ yecircu
cầu để họ xem Webserver liecircn lạc với browser qua giao thức http(s) Một Webserver coacute
thể chứa nhiều website Hai chương trigravenh webserver nổi tiếng nhất lagrave IIS vagrave Apache
f) Http lagrave giao thức để browser vagrave web server trao đổi với nhau nhằm đưa trang web cho
người dugraveng xem
g) Web tĩnh Lagrave trang web chỉ coacute tag html vagrave dữ liệu tất cả đều gotilde trực tiếp trong trang
chứ khocircng đặt ở nơi khaacutec File coacute tecircn mở rộng lagrave html hoặc htm
Trong mocirc higravenh web tĩnh user yecircu cầu 1 trang web html trang web nagravey đatilde được thiết kế
sẵn vagrave đặt trecircn webserver trang web khocircng hề coacute tương taacutec đến CSDL Webserver chỉ
việc lấy file html trả về cho user Vậy lagrave xong
h) Web động Lagrave trang web coacute truy xuất đến cơ sở dữ liệu (Database) hoặc coacute tương taacutec
với webserver để thực hiện 1 chức năng cao cấp nagraveo đoacute Một trang web động coacute thể trả
về những kết quả khaacutec nhau tugravey theo yecircu cầu của người sử dụng Thiết kế web động đogravei
hỏi người thiết kế coacute nhiều kiến thức HTML Javascript Database WebServer hellip tốn
nhiều cocircng sức vagrave thời gian Mocirc higravenh Web động
Sau khi học xong chương nagravey học viecircn coacute khả năng
minus Nắm vững caacutec thẻ cơ bản kết hợp CSS để lagravem layout cho trang web minus Xử lyacute caacutec hiệu ứng với jQuery minus Vận dụng BootStrap vagrave jQueryUI trong thiết kế giao diện
Web
Server
User
(Browser)
Yecircu cầu
Đaacutep ứng (html gif hellip)
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 55
Trong mocirc higravenh web động Webserver sẽ tương taacutec với caacutec chương trigravenh ldquohậu trườngrdquo phiacutea
sau noacute (PHP ASPNEThellip) để thực hiện 1 số việc nagraveo đoacute (thường lagrave kết nối cơ sở dữ liệu)
caacutec chương trigravenh nagravey lấy dữ liệu trong hệ quản trị cơ sở dữ liệu vagrave thực hiện định dạng
(nếu cần) rồi đưa về cho webserver để webserver sẽ trả về cho user
Caacutec chương trigravenh ldquohậu trườngrdquo như PHP ASPNEThellip lagrave chương trigravenh trung gian lagrave cầu nối
giữa Webserver vagrave cơ sở dữ liệu Sở dĩ coacute chuacuteng lagrave vigrave tương taacutec với cơ sở dữ liệu khocircng
phải lagrave mục tiecircu của webserver nhiệm vụ chiacutenh của WebServer lagrave tương taacutec với user để
trả về trang web (qua giao thức http)
212 Giới thiệu HTML
- HTML (Hyper Text Markup Language) lagrave một ngocircn ngữ để quy định caacutech hiển thị thocircng
tin trong trang web HTML gồm nhiều lệnh mỗi lệnh gọi lagrave 1 tag Mỗi tag quy định một
caacutech thức hiển thị dữ liệu trong trang web Viacute dụ như chữ đậm chữ nghiecircng magraveu chữ
hellip Người xem trang web khocircng thấy caacutec tag magrave chỉ thấy caacutec dữ liệu được định dạng bởi
caacutec tag Noacutei đơn giản HTML lagrave 1 ngocircn ngữ dugraveng để tạo ra caacutec trang web
- Caacutec tag cugraveng với dữ liệu trong đoacute được lưu trong 1 file text gọi lagrave trang web File nagravey
thường coacute tecircn mở rộng lagrave html hoặc htm
- Viacute dụ Nếu bạn gotilde như sau khi tạo trang web
thigrave kết quả hiện trong Browser sẽ thế nagravey
- Tecircn tag khocircng quan trọng chữ thường chữ hoa tecircn tag phải đặt trong 2 dấu lt gt
thường coacute mở vagrave đoacuteng Một số tag chỉ coacute mở như lthrgt ltbrgt ltimggt
213 Cấu truacutec của 1 trang web
- Một trang web thường coacute mở đầu vagrave kết thuacutec bởi tag html
- Tag head chứa những thocircng tin để quản lyacute vagrave hoạt động nội tại becircn trong trang web
khocircng hiện ra cho user xem
- Tag title lagrave tiecircu đề của trang web bạo giờ cũng nằm trong tag head
Web
Server
User (Browser)
Yecircu cầu
Đaacutep ứng (html gif
aspx jsp php hellip)
Hệ CSDL
(PHP ASPNET hellip)
Tools quản
trị
Lớp ltbgtASPNETltbgtltbrgt
Họ tecircn ltugtltigtNguyễn Văn Tegraveoltigtltugt
Lớp ASPNET
Họ tecircn Nguyễn Văn Tegraveo
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 56 Version 11 ndash 032019
- Tag body chứa dữ liệu hiện ra trong trang web cho user xem
214 Caacutec tag HTML căn bản Tecircn Tag Cuacute phaacutep Định nghĩa
ltagt lta href=abchtmlgtTecircn hiển thịltagt Tạo liecircn kết đến trang abchtml
ltbgt ltstronggt
ltbgtNội dung đoạn vănltbgt ltstronggtHello ASP Coreltstronggt
In đậm
ltbrgt Nội dung đoạn văn ltbrgt bắt đầu một dograveng mới
Xuống dograveng khocircng qua đoạn mới
ltbgsoundgt ltbgsound delay=1 loop=-1 src=startwavgt
Nhạc nền cho trang web
ltcentergt ltCENTERgtCanh giữa chữltCENTERgt Canh giữa
ltdivgt ltdivgthelliphellipltdivgt div chứa 1 vugraveng dữ liệu trong trang
ltemgt ltemgt Nội dung ltemgt Định dạng kiểu chữ nghiecircng
lth1gt to lth6gt
lth1gtTiecircu đề 1 lth1gt lth2gtTiecircu đề 2 lth2gt lth3gtTiecircu đề 3 lth3gt lth4gtTiecircu đề 4 lth4gt lth5gtTiecircu đề 5 lth5gt lth6gtTiecircu đề 6 lth6gt
Tạo tiecircu đề (cấp 1 đến cấp 6)
lthrgt lthr color=FF0000gt Tạo một đường gạch ngang
ltigt ltemgt
ltigt Nội dung ltigt ltemgtIn nghiecircngltemgt
Chữ in nghiecircng
ltiframegt ltiframe name=content_frame width=488 height=244 src=welcomehtmgt ltiframegt
Tạo 1 iframe (iframe lagrave 1 vugraveng trong trang chứa 1 trang web khaacutec)
ltimggt ltimg src=hinhgif width=41 height=41 border=0 alt=Mocirc tả về higravenh ảnhgt
Chegraven higravenh vagraveo văn bản
ltmarqueegt ltmarquee direction=left loop=-1 scrollamount=2 width=100gtChữ cuộnltmarqueegt
Lagrave tag dugraveng để cuộn (higravenh văn bản)
ltpgt ltpgtNội dung đoạn văn bảnltpgt Paragraph
ltsmallgt ltsmallgtNội dung văn bảnltsmallgt Chữ nhỏ
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 57
ltspangt ltspangt Nội dung văn bảnltspangt Bao quanh 1 vugraveng text để định dạng
ltstronggt ltstronggtNội dung đoạn văn bảnltstronggt
Chữ đậm
ltsubgt ltsubgtNội dung đoạn văn bảnltsubgt Chữ subscript (chữ xuống dưới+nhỏ)
ltsupgt ltsupgtNội dung đoạn văn bảnltsupgt Chữ superscript (chữ lecircn cao+nhỏ)
ltugt ltugtNội dung đoạn văn bảnltugt Gạch dưới
215 Caacutec tag mới trong HTML5
Tag Mocirc tả
ltarticlegt Định nghĩa một bagravei viết một nội dung riecircng biệt
ltasidegt Định nghĩa nội dung becircn ngoagravei nội dung chiacutenh (thường lagrave phần sidebar)
ltaudiogt Định nghĩa acircm thanh như nhạc hay trường audio khaacutec
ltcanvasgt Được dugraveng để hiển thị đồ họa
ltcommandgt
Định nghĩa một nuacutet lệnh giống như một Radiobutton hộp kiểm hoặc một button
ltdatalistgt
Định nghĩa một danh saacutech tugravey chọn sử dụng thagravenh phần nagravey cugraveng với caacutec thagravenh phần input
ltdetailsgt
Xaacutec định thecircm chi tiết hoặc điều khiển coacute thể được ẩn hoặc hiển thị theo yecircu cầu
ltembedgt Xaacutec định nội dung nhuacuteng như một plugin
ltfigcaptiongt Xaacutec định một chuacute thiacutech cho tag figure
ltfiguregt
Xaacutec định caacutec nội dung liecircn quan mạch lạc với nhau như higravenh ảnh sơ đồ code
ltfootergt Định nghĩa khu vực footer (phần cuối) của trang
ltheadergt Định nghĩa khu vực header (phần đầu) của trang
lthgroupgt Định nghĩa một nhoacutem caacutec tiecircu đề
ltkeygengt Xaacutec định một cặp trường khoacutea chiacutenh sử dụng cho form
ltmarkgt
Xaacutec định văn bản được đaacutenh dấu sử dụng khi muốn lagravem nổi bật văn bản của migravenh
ltmetergt
Định nghĩa một pheacutep đo Sử dụng chỉ cho pheacutep đo với giaacute trị tối thiểu vagrave tối đa
ltnavgt Định nghĩa link danh mục (navigation)
ltoutputgt Đại diện cho kết quả của pheacutep tiacutenh (giống như được thực hiện bởi script)
ltprogressgt Mocirc tả tiến trigravenh lagravem việc
ltrpgt Hiển thị những nội dung becircn trong khi trigravenh duyệt khocircng hỗ trợ ruby
ltrtgt
Định nghĩa một lời giải thiacutech hoặc caacutech phaacutet acircm của caacutec kyacute tự (đối với kiểu chữ Đocircng Aacute)
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 58 Version 11 ndash 032019
ltrubygt
Định nghĩa một chuacute thiacutech ruby (đối với kiểu chữ Đocircng Aacute) Chuacute thiacutech Ruby được sử dụng trong khu vực Đocircng Aacute hiển thị caacutech phaacutet acircm của caacutec kyacute tự Đocircng Aacute
ltsectiongt Định nghĩa một khu vực (vugraveng bao)
ltsourcegt Xaacutec định nguồn cho một media
ltsummarygt
Xaacutec định một tiecircu đề cho caacutec thagravenh phần details được sử dụng để mocirc tả chi tiết về tagravei liệu hoặc caacutec bộ phận của tagravei liệu
lttimegt Xaacutec định thời gian ngagravey thaacuteng hoặc năm sinh
ltvideogt Xaacutec định một video chẳng hạn như một đoạn phim hoặc một trường video
ltwbrgt Xaacutec định text quaacute dagravei sẽ tự động xuống hagraveng (khocircng tragraven layout)
216 Cấu truacutec 1 trang web
bull Header lagrave vugraveng chứa nội dung giới thiệu hay hỗ trợ tigravem kiếm nội dung tranghellipvagrave thường đặt đầu trang hay đầu mỗi chuyecircn đề nagraveo đoacute (section)
bull Nav lagrave vugraveng chứa caacutec liecircn kết điều hướng đến caacutec nội dung trong site (thanh điều hướng) bull Section lagrave vugraveng chứa nội dung liecircn quan một chuyecircn đề như kinh doanh giải triacute giaacuteo dục bull Article yacute nghĩa vugraveng nagravey hơi giống section necircn đocirci khi gacircy nhầm lẫn nhưng
nếu section chứa nội dung coacute tiacutenh chuyecircn đề vagrave liecircn quan đến nội dung cả website thigrave article chứa nội dung coacute tiacutenh độc lập với nội dung tổng thể của website ndash nghĩa lagrave coacute thể được dugraveng lại trecircn một website khaacutec magrave khocircng cần chỉnh sửa Article coacute thể dugraveng cho caacutec bagravei viết trecircn blog diễn đagraven caacutec bagravei trecircn baacuteo tạp chiacute vvhellip
bull Aside lagrave vugraveng chứa một phần của toagraven bộ nội dung website như một khối caacutec liecircn kết điều hướng (becircn cạnh thanh điều hướng trong vugraveng nav) thocircng tin quảng caacuteo hay sidebar
bull Footer lagrave vugraveng thường cuối trang chứa nội dung liecircn quan thocircng tin bản quyền taacutec giả hay tổ chức sở hữu website caacutec liecircn kết liecircn quan vvhellip
Chuacute yacute rằng cấu truacutec trang web trecircn chỉ lagrave một trường hợp chung đơn giản Tuỳ theo nội dung tiacutenh năng của website magrave cấu truacutec của noacute sẽ khaacutec nhau
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 59
22 Bảng định kiểu ndash CASCADING STYLE SHEET (CSS) 221 Giới thiệu
- CSS lagrave 1 kỹ thuật dugraveng để định dạng caacutec tag trong trang web CSS giuacutep định dạng trang web
rất nhanh nhờ nhiều kiểu định dạng tag class elementhellip Bạn khocircng thể định dạng 1 trang
web cho đẹp khi khocircng coacute sự am hiểu về CSS Nếu lagravem được điều nagravey chuacuteng ta coacute được caacutec
lợi điểm sau
Dễ quản lyacute bảo trigrave Taacutei sử dụng Một qui luật kiểu daacuteng coacute thể aacutep dụng cho nhiều thagravenh phần web khaacutec nhau Cải thiện tốc độ
o Giảm lượng thocircng tin truyền tải o Caacutech hiển thị của trigravenh duyệt
- Style Lagrave 1 tập hợp caacutec đặc điểm định dạng cho caacutec thagravenh phần trong trang Để định dạng
ta chuyển sang chế độ code rồi định nghĩa caacutec style becircn trong tag ltstylegt Tag ltstylegt cần
đặt trong tag head
222 Khởi động nhanh Để khocircng gặp khoacute khăn của caacutec qui luật của CSS hatildey tigravem hiểu một viacute dụ đơn giản về noacute Qua
đoacute chuacuteng ta coacute dịp lagravem quen với caacutec khaacutei niệm của CSS
Matilde nguồn HTML
ltHTMLgt
ltHEADgt
lttitlegtHTML CSS amp JQuerylttitlegt
ltSTYLE TYPE=textcssgt
H2colorredfont-size 14px
ltSTYLEgt
ltHEADgt
ltH1 style=colorbluefont-styleitalicgt
This is the H1 element (1)ltH1gt
ltH2gtThis is the H2 element (1)ltH2gt
ltH1gtThis is the H1 element (2)ltH1gt
ltH2gtThis is the H2 element (2)ltH2gt
ltHTMLgt
Kết quả thực hiện
Phacircn tiacutech viacute dụ
Data CSS
HTML
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 60 Version 11 ndash 032019
bull Caacutec thẻ lth2gt nhỏ vagrave magraveu đỏ lagrave do dograveng matilde CSS H2colorredfont-size 14px Cograven thẻ lth1gt nghiecircng vagrave coacute magraveu xanh do thuộc tiacutenh style chứa CSS style=colorbluefont-styleitalic
bull Phương phaacutep định nghĩa CSS cho 1 thẻ phugrave hợp cho aacutep dụng hagraveng loạt ngược lại phương phaacutep inline (sử dụng thuộc tiacutenh style) thigrave caacutec CSS được tạo ra chỉ để aacutep dụng cho từng trường hợp đơn lẻ
223 Tạo style định dạng
2231 Tạo style định dạng cho 1 tag trong toagraven trang
Muốn định dạng tag nagraveo thigrave style sẽ giống như tag muốn định dạng
Viacute dụ định dạng tag p vagrave tag a
ltstylegt
p colorF00
a color039 text-decorationnone
ltstylegt
2232 Tạo style định dạng cho 1 đối tượng cụ thể coacute tecircn
Muốn định dạng cụ thể 1 tag nagraveo đoacute theo tecircn do bạn đặt thigrave tạo style bắt đầu bằng dấu
Viacute dụ sau định dạng cho 1 tag coacute tecircn lagrave box
ltstylegt
box width300px height150px text-alignjustify ltstylegt
Chuacute yacute tag phải đặt tecircn theo id khớp với style đatilde tạo thigrave mới coacute taacutec dụng
ltdiv id=boxgt helliphelliphelliphellip ltdivgt
2233 Tạo style định dạng cho tag becircn trong 1 đối tượng coacute tecircn
Muốn định dạng tag becircn trong 1 vugraveng thigrave tạo style theo cocircng thức sau TecircnVugraveng tag
Viacute dụ sau định dạng cho caacutec tag a trong vugraveng coacute tecircn lagrave box
ltstylegt
box a color magenta text-transform uppercase
ltstylegt
2234 Tạo style dạng class vagrave set class
Muốn tạo class gotilde theo cocircng thức sau TecircnClass Viacute dụ sau tạo class tieude
ltstylegt
caption color993 padding5px margin0px text-aligncenter ltstylegt
Set class Tạo class xong muốn tag nagraveo định dạng theo class thigrave chỉ định thocircng số class
Viacute dụ
lth4 class=captiongtTin xem nhiềultcaptiongt
2235 Tạo file css vagrave nhuacuteng vagraveo trang web
Tạo file css
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 61
- Nhắp menu File New chọn CSS Create Lưu với tecircn file css
- Khai baacuteo caacutec style
Nhuacuteng file css vagraveo trang web
ltlink href=c1css rel=stylesheet type=textcss gt
Trong trang web cần aacutep dụng CSS gotilde code trecircn để nhuacuteng file css trong đoacute c1css lagrave tecircn
file css muốn nhuacuteng
224 Caacutec thuộc tiacutenh CSS Khi thiết kế trang web với CSS thigrave vốn kiến thức CSS lagrave khối lượng caacutec thuộc tiacutenh CSS magrave bạn coacute
được Sau đacircy trigravenh bagravey danh saacutech caacutec thuộc tiacutenh thường dugraveng nhất coacute phacircn loại
Caacutec thuộc tiacutenh CSS thường sử dụng để định nghĩa cho văn bản trecircn trang web như font chữ
magraveu sắc chế độ hiển thịhellip
2241 Định dạng chữ
Thuộc tiacutenh Mocirc tả
font-family Verdana Geneva sans-serif
Chỉ định tecircn font Caacutec font được liệt kecirc caacutec nhau dấu phẩy Aacutep dụng cho font được tigravem thấy trước
font-size 12px Kiacutech thước font
font-style italic Kiểu font (italic chữ nghiecircng)
line-height 12px Độ cao của mỗi hagraveng
font-weight bold Độ đậm của font chữ bold (đậm) 100 (độ đậm 100)
font-variant small-caps Chữ hoa nhỏ kyacute tự đầu lơn hơn
text-transform uppercase đổi chữ hoa chữ thường (capitalize chữ hoa đầu từ uppercase toagraven chữ hoa lowercase toagraven chữ thường)
color F00 Magraveu sắc coacute thể dugraveng matilde (Red Green Blue) hoặc tecircn magraveu
text-decoration none Trang triacute chữ Underline gạch dưới chữ Strikethrough gạch giữa chữ Overline gạch đầu chữ None khocircng gạch
text-align center canh chữ (left right center justify)
text-shadow magraveu boacuteng của chữ
letter-spacing 2em Khoảng caacutech giữa caacutec kyacute tự
text-align justify Canh lề left right center justify
text-indent 5px Khoảng thụt vagraveo đầu dograveng
vertical-align middle Canh lề đứng top bottom middle base-line
word-spacing 4em Khoảng caacutech giữ caacutec từ
letter-spacing 2em Khoảng caacutech giữa caacutec kyacute tự
2242 Background
Nền chỉ coacute 2 loại lagrave magraveu vagrave ảnh Nếu lagrave ảnh thigrave cần điều chỉnh chế độ lặp lại (laacutet) Trong
trường hợp khocircng lặp bạn cần điều chỉnh vị triacute đặt ảnh nền
Thuộc tiacutenh Mocirc tả
background-color F00 Magraveu nền
background-attachment fixed Chế độ cuộn ảnh nền Fixed = cố định ảnh nền khi cuộn nội dung Scroll = ảnh nền cuộn theo nội dung
background-image url(anhabcjpg) Ảnh nền
background-repeat repeat Chế độ lặp None khocircng lặp Repeat lặp cả 2 chiều
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 62 Version 11 ndash 032019
repeat-x lặp chiều ngang repeat-y lặp chiều đứng
background-position left center Vị triacute đặt ảnh nền trường hợp khocircng lặp
Background-size 100 100 Kiacutech thước ảnh nền (width height)
2243 Box
Mocirc higravenh của một hộp gồm kiacutech thước lề phần đệm được viềng chế độ xếp hộp
Thuộc tiacutenh Mocirc tả
height 222px Chiều cao
width 111px Chiều rộng
margin 6px Khoảng caacutech từ lề của đối tượng với những đối tượng becircn ngoagravei Sử dụng margin-top margin-right margin-bottom margin-left nếu muốn định nghĩa riecircng mỗi cạnh
padding 4px Phần đệm becircn trong hộp (Khoảng caacutech từ lề của đối tượng với nội dung becircn trong) Sử dụng padding -top padding -right padding -bottom padding -left nếu muốn định nghĩa riecircng mỗi cạnh
border medium dotted F00
Đường kẻ theo thứ tự độ dagravei kiểu magraveu Sử dụng border -top border -right border -bottom border -left nếu muốn định nghĩa riecircng mỗi cạnh
float left Gacircm (chế độ xếp hộp) vagraveo traacutei left (gacircm traacutei) right(gacircm phải)
clear right Hủy bỏ chế độ gacircm left(xoacutea gacircm traacutei) right(xoacutea gacircm phải) both(xoacutea gacircm cả 2 becircn)
2244 Border
- border-style kiểu đường viền
- border-width độ dagravey
- border-color Magraveu đường viền
- border-radius bo trograven goacutec
- box-shadow tạo boacuteng cho đối tượng định dạng
2245 List
Để điều chỉnh ltOLgt ltULgt vagrave ltLIgt bạn cần sử dụng caacutec thuộc tiacutenh css sau đacircy
Left
Top
Rig
ht
Bottom
Margin
Padding
Border
width
Hei
ght
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 63
Thuộc tiacutenh Mocirc tả
list-style-position inside Vị triacute đặt dấu danh saacutech
list-style-type square Kiểu dấu danh saacutech disc trograven đen circle trograven trắng square vuocircnghellip
list-style-image url(xyzabcgif) higravenh dugraveng thay thế kyacute tự bullet
2246 Layer
Để tạo ra vagrave điều chỉnh caacutec thocircng số của noacute bạn cần học caacutec thuộc tiacutenh css sau đacircy lagrave đủ
Thuộc tiacutenh Mocirc tả
overflow scroll Điều kiển chế độ tragraven scroll visible hidden
position relative Chế độ vị triacute của layer Absolute (vị triacute tuyệt đối so với layer mẹ) relative (vị triacute tương đối tức đặt tại vị triacute đặt thẻ)
visibility visible Ẩn hiện layer
left 0px Vị triacute layer tiacutenh từ becircn traacutei
top 0px Vị triacute layer tiacutenh từ becircn trecircn
right 0px Vị triacute layer tiacutenh từ becircn phải
bottom 0px Vị triacute layer tiacutenh từ becircn dưới
z-index 111 Chiều z hướng từ trong magraven higravenh ra người dugraveng Layer nagraveo coacute z-index cao hơn sẽ nằm trecircn
225 Bộ chọn (Selector) Bộ chọn (selector) lagrave nơi định nghĩa caacutec qui luật kiểu daacuteng để aacutep dụng cho caacutec thagravenh phần trecircn
trang web Coacute 3 loại bộ chọn cơ bản lagrave Class ID vagrave HTML
2251 Bộ chọn HTML (HTML Selector)
Định nghĩa định nghĩa kiểu daacuteng bổ sung cho caacutec thẻ HTML
lttecircn thẻgtltkhai baacuteo caacutec thuộc tiacutenh cssgt
Aacutep dụng Tự động aacutep dụng caacutec qui luật css trong phần khai baacuteo cho tất cả caacutec thẻ coacute tecircn lagrave lttecircn thẻgt
Viacute dụ sau đacircy định nghĩa lại thẻ ltfieldsetgt vagrave legend với caacutec thuộc tiacutenh kiacutech thước (width) đường kẻ (border) magraveu chữ (color) magraveu nền (background-color)
ltHTMLgt
ltHEADgt
lttitlegtHTML CSS amp JQuerylttitlegt
ltSTYLE TYPE=textcssgt
FIELDSET
width 250px
border 1px dotted 0000FF
LEGEND
font-weight bold
color FF0000
background-color FFFF00
border 1px dotted 0000FF
width 150px
ltSTYLEgt
ltHEADgt
ltbodygt
ltfieldsetgt
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 64 Version 11 ndash 032019
ltlegendgtGiới tiacutenhltlegendgt
ltinput type=radio name=rdoGioiTinh checkedgtNam
ltinput type=radio name=rdoGioiTinh gtNữ
ltfieldsetgt
ltbodygt
ltHTMLgt
Kết quả hiển thị
2252 Bộ chọn lớp (Class Selector)
Định nghĩa định nghĩa một lớp được bắt đầu bởi dấu chấm () becircn trong khai baacuteo nhiều thuộc tiacutenh css để aacutep dụng cho bất kỳ thẻ nagraveo chỉ định bởi thuộc tiacutenh class của noacute
lttecircn lớpgtltkhai baacuteo caacutec thuộc tiacutenh cssgt
Aacutep dụng tất cả caacutec thẻ sử dụng thuộc tiacutenh class coacute giaacute trị lagrave lttecircn lớpgt Chuacute yacute thuộc tiacutenh class của mỗi thể coacute thể chỉ đến nhiều class cugraveng một luacutec (caacutech nhau khoản trắng)
Viacute dụ sau định nghĩa 2 bộ chọn lớp sau đoacute thẻ ltH1gt aacutep dụng một cograven thẻ ltDIVgt aacutep dụng cả hai để tận dụng caacutec đặc điểm tổng hợp
ltHTMLgt
ltHEADgt
lttitlegtHTML CSS amp JQuerylttitlegt
ltSTYLE TYPE=textcssgt
MyHeader
font-family Arial Helvetica sans-serif
font-weight bold
font-style italic
font-size 14px
color FF0000
MyBorder
border 3px double blue
font-size 20px
display inline
ltSTYLEgt
ltHEADgt
ltbodygt
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 65
lth1 class=MyHeadergtHello World lth1gt
ltdiv class=MyHeader MyBordergtHello World ltdivgt
ltbodygt
ltHTMLgt
Trong đoacute
font-family tecircn font chữ font-weight độ đậm font-style kiểu chữ font-size kiacutech thước chữ color magraveu chữ
Kết quả thực hiện
2253 Bộ chọn định danh (ID Selector)
Định nghĩa giống như bộ chọn lớp nhưng khởi đầu với dấu ragraveo ()
lttecircn định danhgtltkhai baacuteo caacutec thuộc tiacutenh cssgt
Aacutep dụng tất cả caacutec thẻ sử dụng thuộc tiacutenh id với giaacute trị lagrave lttecircn định danhgt Viacute dụ sau định nghĩa bộ chọn định danh tecircn lagrave MyPara sau đoacute aacutep dụng cho một thẻ ltPgt
trong trang web Chuacute yacute thẻ ltPgt cograven lại khocircng hề bị ảnh hưởng gigrave
ltHTMLgt
ltHEADgt
lttitlegtHTML CSS amp JQuerylttitlegt
ltSTYLE TYPE=textcssgt
MyPara
background-color orange
background-image url(imagesabcgif)
text-align justify
margin 10px
padding 5px
border 1px dotted 0000FF
ltSTYLEgt
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 66 Version 11 ndash 032019
ltHEADgt
ltbodygt
ltp id=MyParagtĐoạn mộtltpgt
ltpgtĐoạn hailtpgt
ltbodygt
ltHTMLgt
Kết quả thực hiện
2254 Bộ chọn cho liecircn kết
Định nghĩa định nghĩa css cho siecircu liecircn kết Với liecircn kết coacute bốn trạng thaacutei sử dụng lagrave chưa thăm
(chưa click) đatilde thăm coacute chuột vagrave tiacutech cực (đang chọn) Vigrave vậy để định nghĩa CSS aacutep dụng cho
liecircn kết bạn khocircng chỉ định nghĩa CSS cho thẻ ltAgt magrave cograven định nghĩa cả 4 trạng thaacutei của noacute
Sau đacircy lagrave cuacute phaacutep chung định nghĩa css cho siecircu liecircn kết
A ltkhai baacuteo caacutec thuộc tiacutenh cssgt
Alink ltkhai baacuteo caacutec thuộc tiacutenh cssgt
Avisitedltkhai baacuteo caacutec thuộc tiacutenh cssgt
Ahoverltkhai baacuteo caacutec thuộc tiacutenh cssgt
Aactiveltkhai baacuteo caacutec thuộc tiacutenh cssgt
Tecircn style Yacute nghĩa
alink định dạng cho tag a chưa được nhắp trong trang
avisited định dạng cho tag a đatilde được nhắp trong trang
ahover định dạng cho tag a trong trang đang được đưa chuột vagraveo
a định dạng cho tag a trong trang
menu alink định dạng cho tag a chưa nhắp trong vugraveng coacute tecircn lagrave menu
menu avisited
định dạng cho tag a đatilde được nhắp trong vugraveng coacute tecircn lagrave menu
menu ahover định dạng cho tag a đang đưa chuột vagraveo trong vugraveng menu
menu a định dạng cho tag a trong vugraveng coacute tecircn lagrave menu
menu Alink định dạng cho tag a (chưa nhắp) trong vugraveng coacute class lagrave menu
menu Avisited định dạng cho tag a (đatilde nhắp) trong vugraveng coacute class lagrave menu
menu Ahover định dạng tag a (đang đưa chuột vagraveo) trong class lagrave menu
menu A định dạng cho tất cả liecircn kết trong vugraveng coacute class lagrave menu
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 67
tieudetin định dạng cho liecircn kết coacute class lagrave tieudetin
Aacutep dụng Tất cả caacutec liecircn kết trong trang coacute định nghĩa CSS cho liecircn kết Viacute dụ
ltHTMLgt ltHEADgt
lttitlegtHTML CSS amp JQuerylttitlegt
ltSTYLE TYPE=textcssgt A
font-family Arial font-size 16px text-decoration none Alink color Blue
Avisited color Green
Ahover text-decoration underline color Red
border 1px dotted Red background-color Yellow
Aactive color Orange
ltSTYLEgt ltHEADgt
ltbodygt lta href=1gtLink 1ltagt | lta href=2gtLink 2ltagt | lta href=3gtLink 3ltagt |
lta href=4gtLink 4ltagt | lta href=5gtLink 5ltagt | ltbodygt
ltHTMLgt
Kết quả thực hiện Link3 đang coacute chuột Link2 đatilde bị click trước đoacute
2255 Nhiều bộ chọn cugraveng kiểu
Định nghĩa định nghĩa nhiều bộ chọn đồng một số kiểu daacuteng
ltbộ chọn 1gt ltbộ chọn 2gthellipltbộ chọn ngtltkhai baacuteo caacutec thuộc tiacutenh cssgt
Aacutep dụng aacutep dụng caacutec khai baacuteo css cho tất cả caacutec thẻ coacute chỉ định sử dụng css thotildea matilden với caacutec bộ chọn được liệt kecirc caacutech nhau dấu phẩy
Viacute dụ
lthtmlgt
ltheadgt lttitlegtHTML CSS amp JQuerylttitlegt
ltstyle type=textcssgt
A B DIV INPUT H2
font-weight bold font-style italic color FF0000 font-size 11pt
ltstylegt ltheadgt
ltbodygt
ltdiv class=BgtCocircng cha như nuacutei thaacutei sơnltdivgt ltdiv id=AgtNghĩa mẹ như nước trong nguồn chảy raltdivgt
ltdivgtltinput value=Một lograveng thờ mệ kiacutenh cha size=55 gtltdivgt lth2gtCho trograven đạo hiệu mới lagrave đạo conlth2gt
ltinput value=Thẻ input nagravey khocircng bị ảnh hưởng gigrave size=55 gt
ltbodygt lthtmlgt
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 68 Version 11 ndash 032019
Kết quả thực hiện
Lưu yacute ldquoDIV INPUTrdquo coacute nghĩa lagrave định nghĩa css cho caacutec thẻ ltINPUTgt đặt trong caacutec thẻ ltDIVgt
Vigrave vậy trong bagravei nagravey thẻ ltinputgt khocircng đặt trong ltdivgt khocircng hề chịu taacutec dụng của css đatilde định
nghĩa
2256 Bộ chọn khoanh vugraveng
Định nghĩa định nghĩa CSS cho caacutec vugraveng khaacutec nhau trecircn trang Như vậy chuacuteng ta cần xaacutec định vugraveng cần aacutep dụng vagrave bộ chọn chứa caacutec CSS để aacutep dụng
ltvugravenggt ltbộ chọngtltkhai baacuteo caacutec thuộc tiacutenh cssgt
Aacutep dụng CSS của bộ chọn cho caacutec thẻ đặt trong ltvugravenggt vagrave chỉ định aacutep dụng bộ chọn Viacute dụ
ltHTMLgt ltHEADgt lttitlegtHTML CSS amp JQuerylttitlegt ltSTYLE TYPE=textcssgt --votilde bọc becircn ngoagravei rộng 900px canh giữa nền trắng-- containerwidth900px margin 0px auto background-color White --đầu trang cao 100px-- topheight 100px background-color Red --menu trang cao 22px canh giữa-- menuheight 22px background-color Yellow text-aligncenter --giữa trang cao tối thiểu 400px-- middlemin-height 400px --giữa-traacutei cao như middle rộng 250px gacircm traacutei-- middle_left floatleftwidth 250pxmin-heightinherit background-color Aqua --giữa-phải cao như middle rộng 650px gacircm phải-- middle_right floatrightwidth 645pxmin-heightinherit background-color White --chacircn trang khocircng gacircm cao 22px-- bottomclearbothheight 22px background-color Yellow --fieldset trong middle_left cao tối thiểu 150-- middle_left fieldsetmin-height 150px --li trong middle_left khocircng dugraveng dấu kẽ chacircn-- middle_left lilist-style-typenone border-bottom 1px dotted red --liecircn kết trong menu caacutech nhau 20px-- menu apadding 0px 10px 0px 10px
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 69
--liecircn kết trong middle_left chữ HOA nhỏ-- middle_left afont-variantsmall-caps --liecircn kết coacute chuột trong middle_left in đậm-- middle_left ahoverfont-weight bold --liecircn kết chung cho toagraven trang-- atext-decoration none alink aactive avisitedcolor Blue ahovercolor Red bodybackground-color Gray ltSTYLEgt ltHEADgt ltbodygt ltdiv class=containergt ltdiv class=topgtltdivgt ltdiv class=menugt lta href=1gtHomeltagt | lta href=2gtAbout Usltagt | lta href=3gtContact Usltagt | lta href=4gtFeedbackltagt | lta href=5gtFAQsltagt ltdivgt ltdiv class=middlegt ltdiv class=middle_leftgt ltfieldsetgt ltlegendgtMember Infoltlegendgt ltfieldsetgt ltfieldsetgt ltlegendgtProductsltlegendgt ltligtlta href=1gtNokialtagtltligt ltligtlta href=2gtSumsungltagtltligt ltligtlta href=3gtSony Ericssonltagtltligt ltligtlta href=4gtMotorolaltagtltligt ltligtlta href=5gtAppleltagtltligt ltligtlta href=5gtSeamenltagtltligt ltfieldsetgt ltfieldsetgt ltlegendgtOnline Supportltlegendgt ltfieldsetgt ltdivgt ltdiv class=middle_rightgtltdivgt ltdivgt ltdiv class=bottomgtltdivgt ltdivgt ltbodygt ltHTMLgt
Caacutec bạn lưu yacute caacutec điểm sau
Khoanh vugraveng liecircn kết cho 2 vugraveng khaacutec nhau lagrave menu vagrave middle_left
--liecircn kết trong menu caacutech nhau 20px-- menu apadding 0px 10px 0px 10px
--liecircn kết trong middle_left chữ HOA nhỏ-- middle_left afont-variantsmall-caps
--liecircn kết coacute chuột trong middle_left in đậm--
middle_left ahoverfont-weight bold
Chuacuteng ta cũng khoanh vugraveng cho caacutec ltfieldsetgt vagrave ltligt đặt trong middle_left
--fieldset trong middle_left cao tối thiểu 150--
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 70 Version 11 ndash 032019
middle_left fieldsetmin-height 150px
--li trong middle_left khocircng dugraveng dấu kẽ chacircn-- middle_left lilist-style-typenone border-bottom 1px dotted red
Kết quả thực hiện
226 Qui tắc nạp chồng Nếu nhiều bộ chọn cugraveng được aacutep dụng cho cugraveng một thẻ thigrave phần khaacutec nhau sẽ được
gộp lại vagrave phần giống nhau sẽ bị bộ chọn coacute độ ưu tiecircn cao hơn nạp chồng lecircn caacutec bộ chọn coacute
độ ưu tiecircn thấp hơn
Thể loại vagrave vị triacute định nghĩa của caacutec bộ chọn sẽ ảnh hướng đến độ ưu tiecircn của chuacuteng khi
aacutep dụng lecircn một thẻ Hatildey ghi nhớ 2 qui tắc sau
Phacircn biệt theo thể loại o Nội tuyến -gt Bộ chọn ID -gt Bộ chọn Class -gt Bộ chọn HTML -gt Mặc định
Phacircn biệt theo vị triacute định nghĩa o Nội tuyến -gt Nhuacuteng -gt Liecircn kết ngoagravei
Viacute dụ sau thẻ ltH1gt chịu ảnh hưởng cả 3 bộ chọn khaacutec nhau Khi chạy sẽ cho dograveng chữ ldquoNạp
Chồngrdquo magraveu vagraveng
ltHTMLgt ltHEADgt ltTITLEgtJob applicationltTITLEgt ltstyle type=textcssgt H1color green xyzcolor yellow abccolor Red ltstylegt
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 71
ltHEADgt ltBODYgt
ltH1 class=abc id=xyzgtNạp chồngltH1gt ltBODYgt ltHTMLgt
227 CSS3 Ngoagravei những thuộc tiacutenh đatilde được hỗ trợ ở CSS1 CSS2 CSS3 cograven coacute caacutec thuộc tiacutenh
Thuộc tiacutenh Mocirc tả
animation Xaacutec định một chuyển động của một thagravenh phần
appearance Định dạng cho thagravenh phần trocircng như giao diện chuẩn gần với người dugraveng
backface-visibility Xaacutec định bề mặt sau của thagravenh phần khi thực hiện một chuyển động xoay
background-clip Xaacutec định vugraveng backgroud được cắt bớt theo vugraveng được giới hạn
background-origin Xaacutec định giaacute trị tương đối của background giới hạn theo vugraveng giới hạn
background-size Xaacutec định lại chiều rộng vagrave chiều cao cho background
background
gradient
Tạo magraveu sắc cho background theo biecircn độ giảm dần
Nhiều background Sử dụng để khai baacuteo nhiều dạng background khaacutec nhau trong cugraveng một tag
border-image Dugraveng để định dạng caacutec dạng border bằng higravenh ảnh
border-radius Dugraveng để định dạng caacutec dạng bo goacutec của border
box-align Xaacutec định vị triacute cho thagravenh phần theo chiều dọc hoặc theo chiều thẳng đứng
box-direction Xaacutec định hướng cho thagravenh phần
box-flex Xaacutec định sự ưu tiecircn linh hoạt theo caacutec thagravenh phần khaacutec
box-ordinal-group Cho biết thứ tự ưu tiecircn của caacutec thagravenh phần
box-orient Xaacutec định thagravenh phần dọc theo phương hướng khối hoặc theo trục
box-pack Định vị triacute của thagravenh phần theo meacutep rigravea của thagravenh phần
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 72 Version 11 ndash 032019
box-sizing Xaacutec định lại chiều rộng vagrave chiều cao của thagravenh phần
box-shadow Định dạng boacuteng cho thagravenh phần
column Dugraveng để chia nội dung thagravenh phần thagravenh nhiều cột khaacutec nhau
font-face Định dạng caacutec dạng font chữ khaacutec nhau theo caacutec dạng font riecircng
font-size-adjust
Dugraveng để định dạng điều chỉnh cho font chữ độ lớn của chữ được thể hiện bởi
pheacutep nhacircn
keyframes
Dugraveng để điều khiển diễn biến một hoạt động của thagravenh phần được dugraveng kegravem
với thuộc tiacutenh animation
nav
Di chuyển qua lại giữa caacutec thagravenh phần điều hướng (navigate) bằng caacutech di
chuyển caacutec phiacutem mũi tecircn
opacity Hiển thị cấp độ trong suốt cho thagravenh phần
perspective Cho ta thấy được chiều sacircu của thagravenh phần trong khai baacuteo 3D
perspective-origin Định nghĩa trục quay cho thagravenh phần coacute sử dụng perspective
resize Định dạng cho vugraveng nội dung magrave người dugraveng coacute thể thay đổi được kiacutech thước
text-justify
Tăng hoặc giảm khoảng caacutech giữa caacutec từ vagrave giữa caacutec kyacute tự sao cho dagraven đều
thagravenh phần
text-overflow Xaacutec định vugraveng text được cắt bớt
text-shadow Xaacutec định boacuteng đỗ cho text
transform
Xaacutec định một chuyển đổi 2 chiều 3 chiều coacute thể lagrave xoay tỷ lệ di chuyển
nghiecircng
transform-origin Xaacutec định trục cho một chuyển đổi 2 chiều 3 chiều
transform-style Caacutec thagravenh phần becircn trong sẽ giữ vị triacute 3D của noacute
transition Xaacutec định một quaacute trigravenh chuyển đổi khi coacute một hagravenh động
word-break
Sẽ lagravem cho những chữ trong một từ khocircng cograven lagrave một thể thống nhất nghĩa lagrave
coacute thể xuống hagraveng bất cứ vị triacute nagraveo trong từ
word-wrap Sẽ lagravem cho những từ dagravei xuống hagraveng magrave khocircng lagravem vỡ layout
Caacutec bộ chọn CSS3 bổ sung
Bộ chọn Viacute dụ Mocirc tả
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 73
tag01~tag02 ul~p Chọn tất cả thagravenh phần 02 khi coacute thagravenh phần 01 ở
trước
[attribute^=value] img[src^=bnr_] Chọn tất cả thagravenh phần với thuộc tiacutenh coacute giaacute trị bắt
đầu bằng value
[attribute$=value] img[src$=gif] Chọn tất cả thagravenh phần với thuộc tiacutenh coacute giaacute trị kết
thuacutec bằng value
[attribute=value] img[src=] Chọn tất cả thagravenh phần với thuộc tiacutenh coacute giaacute trị đặc
biệt bằng value
first-of-type pfirst-of-type Chọn thagravenh phần con đầu tiecircn hoặc duy nhất trong caacutec
thagravenh phần cha
last-of-type plast-of-type Chọn thagravenh phần con cuối cugraveng hoặc duy nhất trong
caacutec thagravenh phần cha
only-of-type ponly-of-type
Chọn thagravenh phần con trong caacutec thagravenh phần cha khi
thagravenh phần cha coacute một thagravenh phần con lagrave chiacutenh noacute
Trong thagravenh phần cha coacute thể chứa nhiều thagravenh phần
con tuy nhiecircn thagravenh phần con được chọn phải lagrave duy
nhất khocircng được coacute từ 2 trở lecircn
only-child ponly-child
Chọn thagravenh phần con trong caacutec thagravenh phần cha khi
thagravenh phần cha coacute mỗi thagravenh phần con lagrave chiacutenh noacute
khocircng được chứa thagravenh phần con khaacutec
Chỉ chọn thagravenh phần coacute thagravenh phần cha những thagravenh
phần độc lập sẽ khocircng được chọn
nth-child(n) pnth-child(3)
Chọn thagravenh phần thứ n trong thagravenh phần cha
Chỉ chọn thagravenh phần coacute thagravenh phần cha những thagravenh
phần độc lập sẽ khocircng được chọn
nth-last-child(n) pnth-last-child(3)
Chọn thagravenh phần thứ n tiacutenh từ thagravenh phần cuối trong
thagravenh phần cha
Chỉ chọn thagravenh phần coacute thagravenh phần cha những thagravenh
phần độc lập sẽ khocircng được chọn
nth-of-type(n) pnth-of-type(3) Chọn thagravenh phần thứ n
nth-last-of-type(n)
pnth-last-of-
type(3)
Chọn thagravenh phần thứ n từ thagravenh phần cuối trong
thagravenh phần cha
last-child plast-child
Chọn thagravenh phần cuối cugraveng trong thagravenh phần cha
Chỉ chọn thagravenh phần coacute thagravenh phần cha những thagravenh
phần độc lập sẽ khocircng được chọn
root root Chọn thagravenh phần gốc của văn bản
empty pempty Chọn thagravenh phần khocircng chứa thagravenh phần khaacutec
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 74 Version 11 ndash 032019
target eventtarget Sử dụng trong liecircn kết anchor name (link neo)
enabled inputenabled Chọn thagravenh phần được kiacutech hoạt (enabled) thường sử
dụng cho caacutec thagravenh phần của form
disabled inputdisabled Chọn thagravenh phần bị vocirc hiệu hoacutea (disabled) thường sử
dụng cho caacutec thagravenh phần của form
checked inputchecked Chọn thagravenh phần được check (checked) thường sử
dụng cho caacutec thagravenh phần của form
not(bộ chọn) not(p) Chọn tất cả ngoại trừ bộ chọn trong ngoặc
selection selection Chọn phần tử được người dugraveng chọn
23 JAVASCRIPT VAgrave JQUERY 231 Javascript
- Lagrave ngocircn ngữ lập trigravenh dạng script thực thi trong browser
- Javascript giuacutep trang web coacute tiacutenh tương taacutec đổi magraveu 1 đối tượng khi đưa chuột vagraveo đổi
nội dung của 1 tag đưa ra caacutec thocircng baacuteo cần giao tiếp phoacuteng to higravenh
- Trong trang web matilde lệnh javascript được đặt becircn trong tag script
- Matilde lệnh javascript coacute thể đặt trực tiếp trong trang html hoặc coacute đặt trong 1 file riecircng (
js) Khi đoacute trang html muốn dugraveng code javascript thigrave link đến file js
- Mỗi lệnh javascript kết thuacutec lagrave dấu
2311 Đưa javascript vagraveo trang
Lagrave viết matilde lệnh Javascript trực tiếp trong file HTML với tag script Viacute dụ
ltscriptgt alert(Chagraveo bạn) ltscriptgt
2312 Viết matilde javasctipt trong file riecircng
Lagrave viết matilde lệnh trong file js nằm ngoagravei trang web Sau đoacute nhuacuteng file js vagraveo trang web
a Tạo file javascript
- Nhắp menu File New Javascript Create
- Gotilde matilde lệnh javascript Viacute dụ gotilde
ltscriptgt
hoten=prompt(Bạn ơi bạn tecircn gigrave)
alert(Chagraveo bạn + hoten)
ltscriptgt
- Lưu file với tecircn mở rộng lagrave js
b Liecircn kết file js đến trang html
- Mở 1 fle html Nhắp vị triacute muốn chegraven (thường trong tag head) rồi keacuteo thả file js vagraveo
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 75
232 jQuery - jQuery được phaacutet minh bởi John Resig năm 2006 lagrave một trong những thư viện
JavaScript được dugraveng rộng ratildei nhất hiện nay giuacutep viết code JavaScript dễ hơn
- jQuery coacute nhiều hagravem giuacutep định dạng thay đổi nội dung trang web tạo nhiều hiệu ứng như mờ dần chạy dọc chạy ngang tạo request ajax vvhellip
- jQuery cho pheacutep tạo ra caacutec Plugin
a Nhuacuteng jquery vagraveo trang web
- Vagraveo trang chủ wwwjquerycom vagrave download phiecircn bản mới nhất (file js) cheacutep vagraveo
folder website của bạn rồi insert vagraveo trang web bằng tag script
- Hoặc chegraven Jquery từ site chiacutenh thức của Jquery
ltscript type=textjavascript src=httpcodejquerycomjquery-latestjsgt ltscriptgt ltscript type=textjavascriptgt $(document)ready(function()
Matilde jquery của bạn )
ltscriptgt
Lệnh đầu tiecircn trong jQuery magrave bạn cần biết lagrave lệnh theo dotildei document ready (ready
event) lệnh nagravey theo dotildei vagrave đợi cho đến khi document sẵn sagraveng Code Jquery thường
đặt trong sự kiện nagravey để chuacuteng thực thi khi tagravei liệu sẵn sagraveng
ltscript type=textjavascriptgt
$(document)ready(function()
Matilde jquery của bạn
)
ltscriptgt
b Bộ chọn (Selector)
Thao taacutec cơ bản của Jquery lagrave chọn caacutec phần tử trong tagravei liệu HTML vagrave thực hiện một việc gigrave
đoacute Cuacute phaacutep như sau $(query)action()
$ lagrave kiacute hiệu đặc biệt xaacutec định đacircy lagrave cacircu lệnh jQuery action lagrave hagravem sẽ taacutec động lecircn caacutec
phần tử được chọn (click changehellip) query lagrave caacutech chọn phần tử
Bộ chọn cơ bản
Selector Viacute dụ Yacute nghĩa
lttecircn thẻgt $(a) chọn tất cả caacutec tag ltagt
ltđịnh danhgt $(left) chọn phần tử coacute tecircn lagrave left
lttecircn lớpgt $(tensp) chọn caacutec phần tử coacute class lagrave tensp
lttecircn thẻgtlttecircn lớpgt $(ldquoliapprdquo) Chọn tất cả caacutec thẻ coacute tecircn thẻ lagrave lttecircn thẻgt với thuộc tiacutenh class coacute giaacute trị lagrave lttecircn lớpgt
$(ldquordquo) Chọn tất cả caacutec element trecircn document
Bộ chọn caacutec phần tử của form
Selector Yacute nghĩa
input Chọn tất cả thẻ input textarea trecircn Form
text Chọn tất cả text field trecircn Form
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 76 Version 11 ndash 032019
password Chọn tất cả password field
radio Chọn tất cả radio button
checkbox Chọn tất cả checkbox
submit Chọn tất cả button submit
reset Chọn tất cả button reset
image Chọn tất cả image
button Chọn tất cả generalized button
file Chọn tất cả control upload file
checked Chọn tất cả checkbox coacute check
uncheck Chọn tất cả checkbox khocircng check
blank Chọn tất cả caacutec ocirc nhập để trống
c Bộ lọc Filter
Filter luocircn được dugraveng để lọc caacutec thẻ trecircn một selector nagraveo đoacute
Bộ lọc Filter cơ bản
FILTER Yacute nghĩa
first Chọn phần tử dầu tiecircn trong tập kết quả do Selector trả về
last Chọn phần tử cuối cugraveng trong tập kết quả do Selector trả về
even Chọn phần tử chẵn
odd Chọn phần tử lẻ
eq ( index ) Chọn phần tử tại vị triacute index
gt ( index ) Chọn phần tử coacute vị triacute gt index
lt ( index ) Chọn phần tử coacute vị triacute lt index
header Chọn tất cả header element (H1 H2 H6)
not ( selector ) Chọn phần tử khocircng thỏa selector
Bộ lọc Filter thuộc tiacutenh
FILTER Yacute nghĩa
[attribute] Lọc caacutec phần tử coacute khai baacuteo attribute
[attribute=value] Lọc caacutec phần tử coacute attribute với giaacute trị = value
[attribute=value] Lọc caacutec phần tử coacute attribute với giaacute trị = value
[attribute^=value] Lọc caacutec phần tử coacute attribute với giaacute trị bắt dầu lagrave value
[attribute$=value] Lọc caacutec phần tử coacute attribute với giaacute trị kết thuacutec lagrave value
[attribute=value] Lọc caacutec phần tử coacute attribute chứa giaacute trị value
Bộ lọc Filter nội dung
FILTER Yacute nghĩa
contains(text) Lọc caacutec phần tử coacute chứa chuỗi tex
empty Lọc caacutec phần tử rỗng
has(selector) Lọc caacutec phần tử coacute chứa iacutet nhất 1 element thỏa selector
parent Lọc caacutec phần tử coacute iacutet nhất 1 con hoặc text (Lấy caacutec thẻ khocircng rỗng)
visible Lọc caacutec phần tử coacute trạng thaacutei lagrave visible ( đang hiển thị )
hidden Lọc caacutec phần tử coacute trạng thaacutei hidden ( đang ẩn )
Bộ lọc Filter con chaacuteu
FILTER Yacute nghĩa
nth-child(index) Lọc caacutec phần tử theo vị triacute so với cha của noacute
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 77
nth-child(even) nth-child(odd)
nth-child(equation) Lọc phần tử theo vị triacute ( vị triacute thỏa phuong trigravenh tham số ) so với cha
của noacute
first-child Lấy phần tử dầu tiecircn so với cha của noacute
last-child Lấy phần tử cuối cugraveng so với cha của noacute
only-child Lấy phần tử nếu phần tử nagravey lagrave con duy nhất so với cha của noacute
d Sự kiện (Event)
Caacutec sự kiện thường gặp trong lập trigravenh jQuery
Tecircn sự kiện Giải thiacutech
blur() Xảy ra khi ra khỏi đối tượng
change() Xảy ra khi giaacute trị bị thay đổi
click() Xảy ra khi click vagraveo đối tượng
contextmenu() Xảy ra khi click chuột phải
dbclick() Xảy ra click double chuột
delegate() Bổ sung sự kiện vagraveo đối tượng cả trước vagrave sau khi thecircm bằng Javascript
die() Xoacutea bỏ sự kiện ra khỏi đối tượng
error() Xay ra khi xuất hiện lỗi trecircn đối tượng
focus() Xảy ra khi focus vagraveo đốit tượng (con trỏ chuột đang xử lyacute tại đối tượng)
focusin() Giống focus nhưng bổ sung thecircm điều kiện lagrave sự kiện đang ở trạng thaacutei mới vagraveo
focusout() Giống focus nhưn bổ sung thecircm điều kiện lagrave sự kiện đang ở trạng thaacutei dừng
hover() Xảy ra khi hover chuột vagraveo đối tượng
keydown() Xảy ra khi bagraven phiacutem nhấn xuống
keypress() Xảy ra khi bagraven phiacutem nhấn xuống
keyup() Xảy ra khi nhả bagraven phiacutem
load() Xảy ra khi đối tượng bắt đầu load
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 78 Version 11 ndash 032019
Tecircn sự kiện Giải thiacutech
mousedown() Xảy ra khi nhấn chuột traacutei xuống
mouseup() Xảy ra khi nhả chuột traacutei ra
mouseenter() Xảy ra khi con trỏ chuột đi vagraveo phạm vi của đối tượng
mouseleave() Xảy ra khi con trỏ chuột đi ra ngoagravei phạm vi của đối tượng
mousemove() Xảy ra khi con trỏ chuột đang di chuyển becircn trong đối tượng
mouseover() Xảy ra một lần duy nhất khi con trỏ chuột bắt đầu đi vagraveo phạm vi đối tượng
mouseout() Xảy ra một lần duy nhất khi con trỏ chuột đi ra ngoagravei phạm vi đối tượng
ready() Xảy ra khi browser đatilde load xong
resize() Xảy ra khi resize browser
scroll() Xảy ra khi keacuteo thanh cuộn
submit() Xảy ra khi form được submit
preventDefault()
Đacircy lagrave một phương thức của event Object ở trecircn Noacute khocircng coacute tham số dugraveng để ngăn chặn hagravenh
vi mặc định của sự kiện
$(document)ready( function() $(window)contextmenu( function( e ) code ở đacircy epreventDefault() ) )
e Hagravem
Xử lyacute tập hợp
Method Yacute nghĩa
size() Lấy số phần tử trong tập kết quả của selector
get() Lấy tập DOM elements trong tập kết quả của selector
get(index) Lấy DOM element ở vị triacute index
find(expression) Lấy caacutec element con chaacuteu thỏa matilden expression
each() Gọi thực thi phương thức với từng element trong tập kết quả của
selector
Thao taacutec nội dung thẻ
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 79
Method Yacute nghĩa
html() Lấy nội dung html becircn trong element đầu tiecircn thỏa selector
var html = $(ldquobasicrdquo)html()
html( newContent ) Thay đổi nội dung html becircn trong mọi element thỏa selector ( tương tự
innerHTML trong DOM )
$(ldquoapprdquo)html(ldquoltbgtHelloltbgtrdquo)
text() Lấy nội dung text becircn trong element đầu tiecircn
var Text = $(ldquobasicrdquo)text()
text(value) Thay đổi nội dung text becircn trong mọi element thỏa selector (tương tự
innerText)
$(ldquoapprdquo)html(ldquoltbgtHelloltbgtrdquo)
append(content) Chegraven content vagraveo sau nội dung coacute sẵn của caacutec element thỏa selector
appendTo(selector) Chegraven element thỏa selector vagraveo sau nội dung coacute sẵn của caacutec element
thỏa selector tham số
prepend(content) Chegraven content vagraveo trước nội dung coacute sẵn của caacutec element thỏa selector
prependTo(selector) Chegraven element thỏa selector vagraveo trước nội dung coacute sẵn của caacutec element
thỏa selector tham số
after(content) Chegraven content vagraveo sau caacutec element thỏa selector
before(content) Chegraven content vagraveo trước caacutec element thỏa selector
Thao taacutec thuộc tiacutenh thẻ
Method Yacute nghĩa
attr(name) Lấy giaacute trị một thuộc tiacutenh
v = $(ldquotxtIdrdquo)attr(ldquovaluerdquo)
attr(name value) Thiết lập giaacute trị một thuộc tiacutenh
$(ldquotxtIdrdquo)attr(ldquovaluerdquo ldquoHellordquo)
attr(properties) Thay đổi giaacute trị nhiều thuộc tiacutenh
$(ldquotxtIdrdquo)attr(ldquovaluerdquordquoHellordquoldquodisabledrdquordquotruerdquo)
removeAttr(name) Xoacutea thuộc tiacutenh
$(ldquotxtIdrdquo)removeAttr(ldquodisabledrdquo)
val([value]) Viết tắt của attr(ldquovaluerdquo) để thao taacutec thuộc tiacutenh caacutec phần tử form
$(ldquotxtIdrdquo)val(ldquoHellordquo)
V=$(ldquotxtIdrdquo)val()
Caacutec thuộc tiacutenh vagrave hagravem CSS
Method Yacute nghĩa
css (name) Lấy giaacute trị một thuộc tiacutenh css
w = $(ldquoimgrdquo)css(ldquowidthrdquo)
css (properties) Thay đổi giaacute trị của nhiều thuộc tiacutenh css
$(ldquodivfirstrdquo)css(
ldquotext-alignrdquordquocenterrdquo ldquobackground-imagerdquordquourl(bggif)rdquo
)
css (propertyvalue) Thay đổi giaacute trị một thuộc tiacutenh css
$(ldquotroddrdquo)css(ldquobackground-colorrdquordquoredrdquo)
addClass (class) Thecircm class vagraveo caacutec element thỏa selector
hasClass (class) Kiểm tra class coacute tồn tại trong caacutec element thỏa selector
removeClass(class) Xoacutea class khỏi caacutec element thỏa selector
toggleClass (class) Thecircm class vagraveo caacutec element thỏa selector nếu class chưa khai baacuteo
ngược lại nếu đatilde tồn tại rồi class sẽ bị xoacutea
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 80 Version 11 ndash 032019
Thao taacutec kiacutech thước
Method Yacute nghĩa
height () Lấy chiều cao của element đầu tiecircn thỏa selector
H=$(ldquoMyImagerdquo)height()
width () Lấy chiều rộng của element đầu tiecircn thỏa selector
W=$(ldquoMyDivrdquo)width()
height (val) Thiết lập chiều cao của mọi element thỏa selector
$(ldquoMyImagerdquo)height(300)
width (val) Thiết lập chiều rộng của mọi element thỏa selector
$(ldquoMyImagerdquo)width(400)
f Hiệu ứng
Method Yacute nghĩa
show () Hiển thị caacutec element thỏa selector ngay tức thigrave
$(ldquoabcrdquo)show()
show(speed callback) Hiển thị caacutec element thỏa selector nếu trước đoacute bị ẩn
speed xaacutec định tốc độ hiển thị
callback phương thức sẽ được thực thi khi hiệu
ứng thực hiện xong
$(div1)show(normal function()
alert(ldquoHellordquo)
)
hide () Ẩn element nếu trước đoacute đang hiển thị
hide(speedcallback) Ẩn element nếu trước đoacute đang hiển thị tham số coacute yacute
nghĩa tương tự phương thức show()
$(div1)hide(slow)
$(div1)hide(4000)
toggle( ) Chuyển qua lại trạng thaacutei ẩnhiện caacutec element
toggle(speedcallback) Chuyển qua lại trạng thaacutei ẩnhiện caacutec element tham số coacute
yacute nghĩa tương tự phương thức show()
$(div1)toggle(fast)
$(selector)fadeIn(speedcallback) Hiển thị rotilde dần với tốc độ speed (speed coacute thể lagrave caacutec
chuỗi ldquoslowrdquo ldquofastrdquo hay số mili giacircy như 1000 2000hellip)
$(selector)fadeOut(speedcallback) Hiển thị mờ dần với tốc độ speed (speed coacute thể lagrave caacutec
chuỗi ldquoslowrdquo ldquofastrdquo hay số mili giacircy như 1000 2000hellip)
$(selector)fadeToggle(speedcallback) Hiển thị mờ dần hay rotilde dần với tốc độ speed (speed coacute
thể lagrave caacutec chuỗi ldquoslowrdquo ldquofastrdquo hay số mili giacircy như 1000
2000hellip)
$(selector)fadeTo(speedopacitycallback) Hiển thị phần tử selector theo độ mờ (opacity) cho trước
với tốc độ speed speed coacute thể lagrave caacutec chuỗi ldquoslowrdquo
ldquofastrdquo hay số mili giacircy như 1000 2000hellip opacity coacute giaacute
trị từ 0 đến 1
233 Caacutec thagravenh phần giao diện jQueryUI a Liecircn kết thư viện JQueryUI
Trước khi viết matilde tạo caacutec thagravenh phần giao diện bạn phải chỉ ra thư viện JQuery bằng 2
liecircn kết JavaScript vagrave một liecircn kết css sau
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 81
b JQuery button
Để sử dụng kiểu daacuteng button của JQuery bạn chỉ cần gọi hagravem button trecircn control (nuacutet
liecircn kết) bạn muốn
Viacute dụ sau đacircy sẽ tạo kiểu daacuteng button cho cả ltagt ltaspHyperLinkgt ltinput type=rsquobuttonrsquo vagrave
ltaspButtongt
Matilde nguồn đoạn nhuacuteng
ltscriptgt
$(function ()
$(my-button)button()
)
ltscriptgt
ltaspButton CssClass=my-button ID=Button1 runat=server Text=Button gt
ltaspHyperLink CssClass=my-button ID=lnk runat=servergtHyperLinkltaspHyperLinkgt
ltinput class=my-button id=Button2 type=button value=button gt
lta class=my-button href=gtHelloltagt
c JQuery Datepicker
Thagravenh phần giao diện nagravey cho pheacutep nhập ngagravey thaacuteng bằng caacutech chọn từ bảng lịch xổ xuống
Bạn cũng coacute thể định dạng ngagravey nhận được tugravey thiacutech cũng như hạn chế ngagravey nhập vagraveo nhờ vagraveo
caacutec tugravey chọn
Viacute dụ sau minh họa nhập ngagravey đơn giản
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 82 Version 11 ndash 032019
Matilde nguồn đoạn nhuacuteng
ltscriptgt
$(function ()
$(date)datepicker()
)
ltscriptgt
ltaspTextBox CssClass=date ID=TextBox runat=server gt ltinput class=date id=Button2 type=text gt
ltdivgt
Nếu bạn muốn định dạng ngagravey nhận được thigrave chỉ cần thecircm tugravey chọn ngagravey vagraveo hagravem datepicker
như sau
ltscriptgt
$(function ()
$(date)datepicker(dateFormatrsquodd-mm-yyrsquo)
)
ltscriptgt
Caacutec kyacute tự định dạng
y 2 chữ số năm
m một chữ số thaacuteng
d một chữ số ngagravey
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 83
Nếu bạn muốn hạn chế ngagravey nhập vagraveo thigrave thecircm tham số minDate vagrave maxDate
ltscriptgt
$(function ()
$(date)datepicker(dateFormatyy-mm-dd minDate -2 maxDate +1M
+5D )
) ltscriptgt
Tham số minDate qui định ngagravey tối thiểu được pheacutep chọn cograven maxDate qui định ngagravey tối đa
được chọn
Trong viacute dụ nagravey chuacuteng ta hiểu ngagravey tối thiểu lagrave trước ngagravey hiện tại 2 ngagravey cograven ngagravey tối đa lagrave
sau ngagravey hiện tại 1 thaacuteng 5 ngagravey
Caacutec kyacute tự định dạng
D ngagravey
W tuần
M thaacuteng
Y năm
Nếu thecircm dấu ndash thigrave hiểu lagrave trước ngagravey hiện tại vagrave dấu + thigrave sau ngagravey hiện tại
d JQuery Tabs
Thagravenh phần giao diện nagravey rất quen thuộc với chuacuteng ta Mỗi tab gồm 2 phần lagrave tiecircu đề tab vagrave nội
dung tab Nội dung tab coacute thể lagrave một phần matilde HTML cugraveng trang hoặc nội dung của một trang
web khaacutec được tải theo cơ chế Ajax
Viacute dụ sau đacircy chuacuteng ta tạo ra giao diện 3 tab Tab1 vagrave Tab2 chỉ đến một phần HTML cugraveng trang
cograven Tab3 sẽ tại nội dung của trang Tab3aspx
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 84 Version 11 ndash 032019
Matilde nguồn đoạn nhuacuteng
ltscriptgt $(function () $(mytabs)tabs() ) ltscriptgt e JQuery Accordion
Thagravenh phần giao diện nagravey cũng gần giống như tabs Mỗi mục gồm 2 phần lagrave tiều đề vagrave nội dung
Tại một thời điểm chỉ hiển thị một mục Tuy nhiecircn cocircng dụng của thagravenh phần nagravey thường để
chứa caacutec menu chức năng để tiết kiệm diện tiacutech trang web
Phần tiecircu đề
Phần nội dung
Phần nội dung từ
trang Tab3aspx
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 85
Matilde nguồn đoạn nhuacuteng ltscriptgt
$(function ()
$(my-acco)accordion()
)
ltscriptgt
ltdiv class=my-accogt
lth3gtTiecircu đề mục 1lth3gt
ltdivgtNội dung mục 1ltdivgt
lth3gtTiecircu đề mục 2lth3gt
ltdivgtNội dung mục 2ltdivgt
lth3gtTiecircu đề mục 3lth3gt
ltdivgtNội dung mục 3ltdivgt
ltdivgt
f JQuery Dialog
Thagravenh phần nagravey dugraveng để tạo hộp thoại tương taacutec với người dugraveng Mỗi hộp thoại coacute tiecircu đề nội
dụng vagrave thậm chiacute coacute cả hệ thống nuacutet xử lyacute tương taacutec
Coacute 3 cocircng việt chiacutenh khi viết matilde JQuery lagravem việc với hộp thoại lagrave
Định nghĩa hộp thoại
Mở hộp thoại
Xử lyacute tương taacutec caacutec nuacutet điều khiển
Viacute dụ sau đacircy cho thấy điều đoacute
Nuacutet điều khiển
Nội dung Tiecircu đề
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 86 Version 11 ndash 032019
Sau khi nhấp nuacutet Cancel hoặc dấu cheacuteo goacutec trecircn-phải thigrave hộp thoại được đoacuteng lại Cograven
nếu nhấp vagraveo nuacutet OK sẽ nhận được thocircng baacuteo
Matilde nguồn đoạn nhuacuteng ltscriptgt $(function () cocircng việc 1 định nghĩa hộp thoại $(my-dialog)dialog( width 500 autoOpen false modal true show blind hide explode buttons OK function () cocircng việc 3 xử lyacute tương taacutec nuacutet sự kiện alert(Chagraveo bạn đatilde nhấp nuacutet OK ) Cancel function () cocircng việc 3 xử lyacute tương taacutec nuacutet sự kiện $(my-dialog)dialog(close) ) cocircng việc 2 mở hộp thoại $(my-button)click(function () $(my-dialog)dialog(open) )
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 87
) ltscriptgt ltdiv class=my-dialog title=Tiecircu đề hộp thoạigt Nội dung hộp thoại ltdivgt ltinput class=my-button id=Button1 type=button value=Open dialog gt
Qua viacute dụ trecircn ta thấy cocircng việc 1 định nghĩa hộp thoại coacute cuacute phaacutep sau
$(my-dialog)dialog(thiết lập caacutec tugravey chọn)
Trong trường hợp nagravey chuacuteng ta sử dụng caacutec tugravey chọn với yacute nghĩa sau
Tugravey chọn Mocirc tả
width Định nghĩa chiều rộng của hộp thoại
autoOpen Giaacute trị false sẽ khocircng mở hộp thoại khi định nghĩa Ngược lại giaacute trị true sẽ mở hộp thoại luacutec định nghĩa
modal Khocircng cho tương taacutec lecircn trang web khi hộp thoại hiện ra nếu lagrave true Ngược lại sẽ cho tương taacutec với cửa sở mẹ
show Chỉ ra hiệu ứng luacutec mở hộp thoại
hide Chỉ ra hiệu ứng luacutec đoacuteng hộp thoại
buttons Định nghĩa hệ thống nuacutet điều khiển của hộp thoại
24 BootStrap
241 Giới thiệu BootStrap lagrave một CSS framework phổ biến nhất hiện nay do Twitter phaacutet triển Đacircy lagrave cocircng cụ
giuacutep design trang web bằng css nhanh choacuteng nhờ caacutec class coacute sẵn vagrave caacutec thagravenh phần coacute trecircn
trang web như form navbar tooltip dropdown-menu modal buttonhellip Một trong tiacutenh năng quan
trọng của BootStrap lagrave hỗ trợ Responsive ndash tự động co giatilden theo kiacutech thước magraven higravenh trigravenh duyệt
Để sử dụng download phiecircn bản mới nhất về maacutey vagrave bỏ vagraveo website từ trang
httpsgetbootstrapcom Phiecircn bản hiện tại tiacutenh đến thaacuteng 42018 lagrave BootStrap 41 Thường
khi tạo ứng dụng NET Core MVC thigrave project đatilde cung cấp sẵn bootstrap
242 Hệ thống lưới ndash Grid System Hệ thống lưới trong Bootstrap được chia thagravenh caacutec hagraveng (row) vagrave caacutec cột (column) Cụ thể layout
BootStrap sẽ được chia thagravenh 12 cột Hệ thống lưới hoạt động hiệu quả khi đặt trong class
container (chiều rộng cố định) hoặc container-fluid (chiều rộng full magraven higravenh)
ltdiv class=rowgt ltdiv class=col-sm-2gtLeft sildebarltdivgt ltdiv class=col-sm-8gtContentltdivgt ltdiv class=col-sm-2gtRight sidebar ltdivgt ltdivgt ltdiv class=rowgt ltdiv class=colgtcolltdivgt ltdiv class=colgtcolltdivgt
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 88 Version 11 ndash 032019
ltdiv class=colgtcolltdivgt ltdivgt
Ở viacute dụ trecircn layout của chuacuteng ta gồm 2 hagraveng Hagraveng thứ nhất coacute 3 cột với tỉ lệ 2-8-2 hagraveng thứ
2 cũng 3 cột với tỉ lệ đều nhau (4-4-4) Cuacute phaacutep đặt class cột col-a-b hoặc col
Class Thiết bị Mocirc tả
col- extra small
devices
Kiacutech thước magraven higravenh nhỏ hơn 576px
col-sm- small devices Kiacutech thước magraven higravenh lớn hơn hay bằng 576px
col-md- medium devices
Kiacutech thước magraven higravenh lớn hơn hay bằng 768px
col-lg- large devices Kiacutech thước magraven higravenh lớn hơn hay bằng 992px
col-xl- xlarge devices Kiacutech thước magraven higravenh lớn hơn hay bằng 1200px
243 Định dạng cơ bản a Typography
Caacutech trigravenh bagravey như bản in gồm Heading căn lề vagrave text magraveu chữ magraven nền hellip
b Text Color
Magraveu chữ gồm caacutec bộ text-muted text-primary text-success text-info text-
warning text-danger text-secondary text-white text-dark text-body vagrave
text-light
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 89
c Background Color
Magraveu nền gồm caacutec bộ class bg-primary bg-success bg-info bg-
warning bg-danger bg-secondary bg-dark vagrave bg-light
d Button
Button cơ bản trong BootStrap sử dụng class btn ngoagravei ra bổ sung caacutec class khaacutec btn-
primary btn-secondary btn-success btn-info btn-warning btn-danger
btn-dark btn-light btn-link
BootStrap 4 cograven cung cấp 8 class cho button dạng outlineborder gồm btn-outline-
primary btn-outline-secondary btn-outline-success btn-outline-info
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 90 Version 11 ndash 032019
btn-outline-warning btn-outline-danger btn-outline-dark btn-outline-light
Về kiacutech thước của button sử dụng thecircm caacutec class btn-lg btn-sm
ltbutton type=button class=btn btn-primary btn-lggtLargeltbuttongt
ltbutton type=button class=btn btn-primarygtDefaultltbuttongt ltbutton type=button class=btn btn-primary btn-smgtSmallltbuttongt
e Table
Sử dụng class cơ bản nhất lagrave table ngoagravei ra cograven sử dụng caacutec class khaacutec như table-
striped (kiểu hagraveng sọc caacutec hagraveng chẵn lẻ xem kẽ) table-bordered đoacuteng khung
table-hover thecircm hiệu ứng hover lecircn từng dograveng table-dark nền tối
f Higravenh ảnh
Sử dụng class cơ bản nhất lagrave rounded rounded-circle img-thumbnail để coacute higravenh
ảnh như yacute muốn
g Alert
Sử dụng class cơ bản alert kết hợp với caacutec class khaacutec như alert-
success alert-info alert-warning alert-danger alert-primary alert-
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 91
secondary alert-light alert-dark để coacute magraveu chữ + background phugrave hợp ngữ
cảnh thocircng baacuteo
ltdiv class=alert alert-success alert-dismissiblegt
ltbutton type=button class=close data-dismiss=alertgtamptimesltbuttongt
ltstronggtSuccessltstronggt Indicates a successful or positive action ltdivgt
244 Form Thecircm thuộc tiacutenh class form-control để coacute width 100
ltformgt ltdiv class=form-groupgt
ltlabel for=emailgtEmail addressltlabelgt
ltinput type=email class=form-control id=emailgt
ltdivgt
ltdiv class=form-groupgt
ltlabel for=pwdgtPasswordltlabelgt
ltinput type=password class=form-control id=pwdgt
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 92 Version 11 ndash 032019
ltdivgt
ltdiv class=form-group form-checkgt
ltlabel class=form-check-labelgt
ltinput class=form-check-input type=checkboxgt Remember me
ltlabelgt
ltdivgt ltbutton type=submit class=btn btn-primarygtSubmitltbuttongt ltformgt
Thecircm thuộc tiacutenh class form-inline vagraveo thẻ form để caacutec phần tử trecircn một dograveng
ltform class=form-inline action=gt
ltlabel for=emailgtEmail addressltlabelgt
ltinput type=email class=form-control id=emailgt
ltlabel for=pwdgtPasswordltlabelgt ltinput type=password class=form-control id=pwdgt
ltdiv class=form-checkgt
ltlabel class=form-check-labelgt
ltinput class=form-check-input type=checkboxgt Remember me
ltlabelgt
ltdivgt ltbutton type=submit class=btn btn-primarygtSubmitltbuttongt
ltformgt
Bootstrap đatilde định dạng sẵn css cho caacutec thẻ input input textarea checkbox radio select
Muốn checkbox lecircn cugraveng một dograveng thecircm thuộc tiacutenh form-check-inline vagraveo khối div bao
quanh noacute
ltdiv class=form-check form-check-inlinegt
ltlabel class=form-check-labelgt
ltinput type=checkbox class=form-check-input value=gtOption 1
ltlabelgt
ltdivgt ltdiv class=form-check form-check-inlinegt
ltlabel class=form-check-labelgt
ltinput type=checkbox class=form-check-input value=gtOption 2
ltlabelgt
ltdivgt
ltdiv class=form-check form-check-inline disabledgt
ltlabel class=form-check-labelgt
ltinput type=checkbox class=form-check-input value=gtOption 3
ltlabelgt ltdivgt
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 93
Tương tự thecircm thuộc tiacutenh class radio-inline cho để caacutec radio nằm trecircn 1 dograveng
ltlabel class=radio-inlinegtltinput type=radio name=optradiogtOption
1ltlabelgt
ltlabel class=radio-inlinegtltinput type=radio name=optradiogtOption
2ltlabelgt
ltlabel class=radio-inlinegtltinput type=radio name=optradiogtOption 3ltlabelgt
Caacutec viacute dụ khaacutec về JS Tab JS Dropdown JS Carousel JS Modal xem thecircm tại
httpswwww3schoolscombootstrap4
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 94 Version 11 ndash 032019
TỔNG QUAN VỀ ASPNET CORE 22
31 Giới thiệu Ứng dụng Web
311 Giới thiệu Hagraveng ngagravey chuacuteng ta mở maacutey tiacutenh vagraveo caacutec trang web nổi tiếng như Google Yahoo để tigravem
kiếm đọc vagrave gửi email Chuacuteng ta cũng thường vagraveo caacutec trang baacuteo để đọc tin tức caacutec trang đagraveo
tạo trực tuyến để học hagravenh caacutec trang baacuten hagraveng để tigravem vagrave mua hagraveng tham gia vagraveo diễn đagraven để
tranh luận Tất cả rất tuyệt vời vagrave thật sự coacute yacute nghĩa với cuộc sống mỗi một con người trong thời
đại internet của chuacuteng ta
Sự phaacutet triển mạnh mẽ về cocircng nghệ thocircng tin đặc biệt lagrave internet nhiều lĩnh vực ngagravey
nay như thương mại y tế giaacuteo dục nhu cầu trao đổi thocircng tin thực sự lagrave cần thiết giuacutep cho
cocircng việc được triển khai nhanh choacuteng chiacutenh xaacutec dễ dagraveng vagrave tiết kiệm chi phiacute thocircng tin được
cập nhật kịp thời Do đoacute vấn đề đặt ra lagrave chuacuteng ta cần phải coacute một ứng dụng cho pheacutep trao đổi
thocircng tin mọi luacutec mọi nơi dễ sử dụnghellip thocircng qua mạng Ứng dụng Web đaacutep ứng được caacutec
yecircu cầu đặt ra vagrave sau đacircy lagrave caacutec lyacute do tại sao chuacuteng ta phải sử dụng Web
Dễ dagraveng trao đổi vagrave chia sẽ thocircng tin thocircng tin qua mạng
Sử dụng giao diện đồ họa giuacutep cho người dugraveng dễ sử dụng
Hỗ trợ về multimedia như higravenh ảnh acircm thanh phim ảnhhellip
Hỗ trợ nhiều chương trigravenh(web-browser) để truy cập Web
Hỗ trợ truy cập web trecircn caacutec thiết bị đi động Tablet SmartPhonehellip
Hỗ trợ nhiều ngocircn ngữ để phaacutet triển Web ASPNET JSP PHP Python hellip
312 Nguyecircn lyacute hoạt động
Higravenh 3-1 Nguyecircn tắc hoạt động
Để coacute được kết quả hiển thị của trang web yecircu cầu caacutec bước thực hiện truyền thocircng xảy ra ở
phiacutea hậu cảnh bao gồm
Chuyển đổi ldquourlrdquo thagravenh ldquoiprdquo
Gửi request đến Web Server
Sau khi học xong bagravei nagravey học viecircn coacute khả năng
- Trigravenh bagravey được kiến truacutec ứng dụng WEB
- Nắm được đặc điểm của ứng dụng web ASPNET Core 22
- Tạo ứng dụng với ASPNET Core 22
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 95
Web Server thực hiện caacutec xử lyacute cần thiết theo request
Kết quả được response đến Browser
Web Browser trigravenh bagravey dữ liệu trecircn kết quả trả về vagrave caacutec thẻ markup
313 Caacutec khaacutei niệm
3131 Web client (Browser)
Maacutey khaacutech (Client) thường lagrave Web Browser sẽ sử dụng chương trigravenh để truy cập đến caacutec trang
web gọi lagrave trigravenh duyệt web hay browser Hiện rất nay coacute nhiều trigravenh duyệt web như Chrome
Edge Opera Mozila FireFox
3132 Web server
Caacutec maacutey chủ (Server) chứa caacutec ứng dụng Web sẳn sagraveng truy xuất caacutec trang web hay caacutec tagravei liệu
vagrave gửi về cho client khi nhận được yecircu cầu từ phiacutea Client Hiện nay coacute rất nhiều Web server vagrave
chạy trecircn nhiều hệ thống như Apache Nginx Microsoft IIS hellip
3133 Giao thức HTTP
Quaacute trigravenh giao tiếp giữa client vagrave server được thực hiện thocircng qua giao thức chuẩn
HTTP(HyperText Transfer Protocol) Higravenh minh họa sau mocirc tả việc truy cập ứng dụng Web
Higravenh 3-2 Giao thức HTTP
Web được phaacutet triển trecircn mocirc higravenh client-server
Giao thức HTTP Quaacute trigravenh giao tiếp giữa client vagrave server được thực hiện thocircng qua giao thức chuẩn HTTP (HyperText Transfer Protocol)
Mocirc higravenh gồm hai thagravenh phần chiacutenh lagrave maacutey khaacutech(client) vagrave maacutey phục vụ(server) Maacutey phục vụ(server) sẽ chứa caacutec ứng dụng Web vagrave caacutec ứng dụng Web nagravey sẽ được quản lyacute tập trung bởi trigravenh quản lyacute gọi lagrave Web Server (IIShellip) Caacutec maacutey khaacutech(client) truy cập đến ứng dụng web sử dụng trigravenh duyệt web(browser)
Client sử dụng giao thức HTTP Request để gửi yecircu cầu (trang web) lecircn Server Server xử lyacute vagrave sử dụng giao thức HTTP Response để gửi kết quả về cho Client
3134 Client Scripting vagrave Server Scripting
Caacutec ngocircn ngữ dugraveng để viết matilde cho trang web Một trang web được xử lyacute ở Server vagrave trả kết quả
về cho Client Do đoacute caacutec ngocircn ngữ viết matilde cho trang web được chia thanh hai dạng
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 96 Version 11 ndash 032019
Client Scripting được xử lyacute tại trigravenh duyệt (Browser) trecircn maacutey Client Caacutec ngocircn ngữ dugraveng để viết lagrave VBScript JavaScript hellip
o JavaScript lagrave ngocircn ngữ phổ biến sử dụng nhiều nhất hiện nay JavaScript được dugraveng để kiểm tra việc nhập liệu kiểm tra trigravenh duyệthellip
o DTHML lagrave sự kết hợp của HTML Style Sheet (CSS) vagrave JavaScript nhằm lagravem cho trang web dễ tương taacutec điều khiển vagrave giảm bớt việc xử lyacute phiacutea Server
o VBScript lagrave ngocircn ngữ script của Microsoft Chức năng của VBScript cũng giống như JavaScript
Server Scripting được xử lyacute tại Web server trecircn maacutey Server Caacutec ngocircn ngữ dugraveng để viết lagrave ASP ASPNET PHP JSP Python hellip Trong giaacuteo trigravenh nagravey chuacuteng ta sẽ khảo saacutet ngocircn ngữ ASPNET C
314 Kiến truacutec cocircng nghệ ứng dụng web
Higravenh 3-3 Kiến truacutec cocircng nghệ ứng dụng Web
Trigravenh duyệt giuacutep người sử dụng giao tiếp với ứng dụng web cagravei đặt phiacutea server Phần mềm trung
gian (ứng dụng web) nagravey sẽ nhận vagrave xử lyacute caacutec yecircu cầu của người sử dụng Nếu ứng dụng cần
truy vấn hay lưu trữ thocircng tin noacute sẽ kết nối với CSDL để được trợ giuacutep bởi caacutec hệ quản trị CSDL
1 Thocircng tin trecircn form chuyển đến Web Server thocircng qua request
2 Server thực hiện caacutec xử lyacute được cagravei đặt (server script ndash Server Side)
3 Kết nối vagrave thao taacutec CSDL
4 Kết quả xử lyacute được trả về qua response (HTML)
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 97
32 Tổng quan về ASPNET Core MVC
321 Giới thiệu về ASPNET
Higravenh 3-4 The ASPNET Web Forms technology stack
Đầu năm 2002 Microsoft giới thiệu một kỹ thuật lập trigravenh Web khaacute mới mẻ với tecircn gọi ban đầu
lagrave ASP+ tecircn chiacutenh thức sau nagravey lagrave ASPNet Với ASPNet khocircng những khocircng cần đogravei hỏi bạn
phải biết caacutec tag HTML thiết kế web magrave noacute cograven hỗ trợ mạnh lập trigravenh hướng đối tượng trong
quaacute trigravenh xacircy dựng vagrave phaacutet triển ứng dụng Web ASPNet lagrave kỹ thuật lập trigravenh vagrave phaacutet triển ứng
dụng web ở phiacutea Server (Server-side) dựa trecircn nền tảng của Microsoft Net Framework
Hầu hết những người mới đến với lập trigravenh web đều bắt đầu tigravem hiểu những kỹ thuật ở phiacutea
Client (Client-side) như HTML Java Script CSS (Cascading Style Sheets) Khi Web browser yecircu
cầu một trang web (trang web sử dụng kỹ thuật client-side) Web server tigravem trang web magrave Client
yecircu cầu sau đoacute gởi về cho Client Client nhận kết quả trả về từ Server vagrave hiển thị lecircn magraven higravenh
ASPNet sử dụng kỹ thuật lập trigravenh ở phiacutea server thigrave hoagraven toagraven khaacutec matilde lệnh ở phiacutea server sẽ
được biecircn dịch vagrave thi hagravenh tại Web Server Sau khi được Server đọc biecircn dịch vagrave thi hagravenh kết
quả tự động được chuyển sang HTMLJavaScriptCSS vagrave trả về cho Client Tất cả caacutec xử lyacute lệnh
ASPNet đều được thực hiện tại Server vagrave do đoacute gọi lagrave kỹ thuật lập trigravenh ở phiacutea server
322 ASPNET Core lagrave gigrave ASPNET Core lagrave một Open-source mới vagrave lagrave Cross-Platform framework giuacutep xacircy dựng caacutec
ứng dụng web hiện đại dựa trecircn đaacutem macircy như lagrave web apps IoT apps mobile backends Caacutec ứng
dụng ASPNET Core coacute thể chạy trecircn NET Core hoặc trecircn NET framewrok ASPNET Core cung
cấp một kiến truacutec để tối ưu hoacutea việc xacircy dựng caacutec ứng dụng đaacutem macircy (Microsoft Azure) hoặc
caacutec ứng dụng độc lập Noacute bao gồm caacutec Module thagravenh phần với chi phiacute tối thiểu Do đoacute bạn coacute
thể giữ lại tiacutenh linh hoạt khi xacircy dựng ứng dụng của migravenh
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 98 Version 11 ndash 032019
Higravenh 3-5 Hệ sinh thaacutei ASPNET
ASPNET Core được module hoacutea khocircng cograven dựa vagraveo SystemWebdll magrave dựa vagraveo nhu cầu
người dugraveng cần cagravei đặt caacutec goacutei trecircn Nuget vagrave caacutec thagravenh phần khaacutec Điều nagravey giuacutep bạn optimize
apps chỉ lấy caacutec goacutei Nuget magrave bạn cần Lợi iacutech của ứng dụng nhỏ bao gồm bảo mật chặt chẽ
hơn giảm dịch vụ khocircng cần thiết hiệu suất được cải thiện vagrave giảm chi phiacute tương ứng với caacutec
module magrave bạn sử dụng
Với ASPNET Core bạn sẽ coacute những cải tiến nền tảng sau bull Hợp nhất việc xacircy dựng web UI vagrave web APIs
bull Tiacutech hợp caacutec framework hiện đại cho client-side quy trigravenh phaacutet triển hiện đại
bull Một hệ thống cấu higravenh dựa trecircn mocirci trường đaacutem macircy
bull Build-in dependency injection (DI)
bull Gọn nhẹ hơn module hoacutea HTTP request
bull Khả năng lưu trữ trecircn IIS Nginx Apache Docker hoặc maacutey chủ riecircng của bạn
bull Build trecircn NET Core hỗ trợ từng bước một theo phiecircn bản
bull Đầy đủ caacutec goacutei trecircn Nuget
bull Caacutec cocircng cụ mới hiện đại đơn giản cho phaacutet triển web
bull Xacircy dựng vagrave chạy cross-platform trecircn Windows Mac vagrave Linux
bull Lagrave matilde nguồn mở necircn coacute cộng đồng quan tacircm lớn
Xacircy dựng Web UI vagrave WebAPI sử dụng ASPNET Core MVC bull Mocirc higravenh MVC (pattern) giuacutep dễ dagraveng kiểm thử cho web API vagrave web Apps
bull Razor Page giuacutep xacircy dựng web UI dễ dagraveng vagrave hiệu quả hơn
bull Trigravenh trợ giuacutep thẻ cho pheacutep matilde phiacutea maacutey chủ tham gia tạo vagrave hiển thị caacutec phần tử
HTML trong caacutec tệp Razor
bull Tag Helpers cho pheacutep viết code trecircn server-side sẽ tạo vagrave hiển thị caacutec phần tử HTML
tương ứng ở Razor file
bull Hỗ trợ tiacutech cực cho nhiều dạng dữ liệu (JSON XML) cho pheacutep web API tiếp cận nhiều
khaacutech hagraveng hơn bao gồm browsers vagrave thiết bị di động
bull Mocirc higravenh Binding tự động aacutenh xạ dữ liệu từ caacutec HTTP request đến caacutec tham số trong
phương thức hagravenh động (action method)
bull Mocirc higravenh kiểm tra (validation) tự động thực hiện xaacutec thực cả client-side vagrave server-side
Phaacutet triển phiacutea maacutey khaacutech
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 99
ASPNET Core được thiết kế để tiacutech hợp liền mạch với nhiều khuocircn khổ phiacutea khaacutech hagraveng bao gồm AngularJS ReactJS KnockoutJS vagrave Bootstrap
323 Tạo ứng dụng ASPNET Core MVC Vagraveo menu File chọn New Project Trong cửa sổ tạo mới chọn template Web vagrave chọn ASPNET
Core Web Application Điền thocircng tin project vagrave bấm OK
Chọn NET Core vagrave ASPNET Core 20 template lagrave Web Application (Model-View-
Controller)
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 100 Version 11 ndash 032019
Caacutec loại Authentication
bull No Authentication Khocircng bao gồm phần security project phải tự thiết lập security
riecircng
bull Individual User Accounts Project được tạo ra gồm coacute cả phần security với caacutec chức
năng như đăng nhập đăng kyacute đăng xuất đổi mật khẩu cho pheacutep đăng nhập từ caacutec
ứng dụng becircn ngoagravei
bull Work or School Accounts dự aacuten sử dụng tagravei khoản từ cloud computing Ứng dụng
nagravey phugrave hợp với caacutec doanh nghiệp lớn xuyecircn quốc gia
bull Windows Authentication đacircy lagrave dự aacuten intranet bao gồm cả phầm security nhưng tagravei
khoản quản lyacute ở mạng nội bộ
Cấu truacutec file vagrave thư mục của project ASPNET Core MVC
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 101
Thư mục wwwroot chứa những file tĩnh như html javascript CSS higravenh
Bạn coacute thể truy xuất trực tiếp file sitecss trong thư mục css như sau
httplocalhostltportgtcsssitecss
Thư mục Dependencies chứa caacutec thư viện cagravei đặt từ Nuget
Chạy ứng dụng bằng F5
324 Application Startup Trong project luocircn coacute 2 file đặc biệt lagrave Programcs
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 102 Version 11 ndash 032019
Class Program khởi tạo webserver trong hagravem main() cograven class StartUp cấu higravenh yecircu cầu
pipeline từ ứng dụng
Phương thức tĩnh BuildWebhost dugraveng để cấu higravenh xacircy dựng vagrave sẽ trả về tham chiếu Host
Hagravem CreateDefaultBuilder của lớp WebHost dugraveng để thực thi caacutec task sau
1 Cấu higravenh Kestrel web server
2 Đặt content root ở DirectoryGetCurrentDirectory
3 Load cấu higravenh mặc định từ
a) Appsettingsjson
b) AppsettingsEnvironmentjson
c) User secrets when the app runs in the Development environment d) Environment variables e) Command-line arguments
4 Enable logging
5 Tiacutech hợp Kestrel với IIS
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 103
Higravenh 3-6 ASPNET Pipeline
Kestrel lagrave gigrave
bull Lagrave một web-server đa necircn tảng được xacircy dựng cho ASPNET Core dựa trecircn libuv - một
thư viện xử lyacute IO async đa nền tảng
bull Lagrave web-server mặc định khi dugraveng ASPNET Core template
bull Becircn cạnh đa nền tảng noacute coacute một lợi tế nữa lagrave tốc độ rất nhan
bull Khocircng coacute đầy đủ tiacutenh năng của một web server
bull Necircn dugraveng noacute sau một web server đầy đủ như IISNginxApache
StartUp lagrave class đơn giản khocircng kế thừa từ bất kỳ lớp nagraveo thực thi 2 nhiệm vụ chiacutenh
bull Cấu higravenh đường ống
public void Configure(IApplicationBuilder app IHostingEnvironment env)
bull Cấu higravenh caacutec dịch vụ phụ thuộc (dependency injection)
public void ConfigureServices(IServiceCollection services) servicesAddMvc()
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 104 Version 11 ndash 032019
Higravenh 3-7 ASPNET Core Request Processing
325 Dependency Injection bull Đacircy lagrave một kỹ thuật nhằm loại bỏ sự liecircn kết lẫn nhau giữa caacutec object vagrave caacutec object
dugraveng trong noacute loại bỏ caacutec phụ thuộc
bull ASPNET Core được thiết kế để hỗ trợ dependency injection
bull ASPNET Core dugraveng DI để dẫn caacutec service được xacircy dựng sẵn hoặc service tự tạo vagraveo
trong caacutec phương thức được config trong class Startup
bull Caacutec đăng kyacute vagrave quản lyacute lifetime của DI trong ASPNET Core
o Transient
o Scoped
o Singleton
bull Lợi iacutech của DI đoacute lagrave quản lyacute resource test dễ dagraveng vagrave khả năng mở rộng cao
Service lagrave caacutec dịch vụ được tạo ra để xử lyacute một việc cụ thể (database log cache) được quản
lyacute bởi DI trong ASPNET Core vagrave được đăng kyacute becircn trong StartUp của ứng dụng ASPNET Core
được xacircy dựng theo cơ chế service tất cả đều lagrave service vagrave quản lyacute bởi DI
326 Middleware Middleware lagrave caacutec software component được gắn vagraveo trong pipeline của ứng dụng để xử lyacute
request vagrave response Mỗi component trong pipeline lagrave một request delegate Mỗi delegate coacute thể
khởi chạy component tiếp theo trong một chuỗi caacutec component được gắn vagraveo pipeline Coacute thể
ngắt hoặc chạy tiếp đến caacutec component trong một chuỗi caacutec component trong pipeline được sắp
xếp tuần tự
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 105
Higravenh 3-8 Middle ware
Higravenh 3-9 Middleware in ASPNET Core
327 Mocirc higravenh Model ndash View ndash Controller
Higravenh 3-10 Mocirc higravenh M-V-C
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 106 Version 11 ndash 032019
bull Model-View-Controller (MVC) lagrave mocirc higravenh kiến truacutec xacircy dựng ứng dụng taacutech ra lagravem ba phần chiacutenh riecircng biệt Model View vagrave Controller MVC giuacutep bạn xacircy dựng ứng dụng dễ dagraveng bảo trigrave cập nhật hơn caacutec ứng dụng truyền thống
Model lagrave caacutec class đại diện cho dữ liệu vagrave logic để thực thi nghiệp vụ của dữ liệu đoacute Thocircng thường mỗi model sẽ đại diện cho một table trong database
View lagrave thagravenh phần hiển thị giao diện người dugraveng (UI) của ứng dụng Nhigraven chung view sẽ hiển thị dữ liệu từ model
Controller Coacute nhiệm vụ xử lyacute caacutec request từ trigravenh duyệt (GET POST PUT ) vagrave sau đoacute trả về caacutec data tương ứng cho view
bull MVC giuacutep bạn taacutech biệt caacutec phần của ứng dụng (input logic business logic UI logic) vagrave cung cấp kết nối giữa caacutec lớp nagravey Sự taacutech biệt nagravey giuacutep bạn dễ dagraveng quản lyacute những ứng dụng phức tạp vigrave noacute cho pheacutep bạn lagravem việc trecircn một phần vagrave khocircng ảnh hưởng đến những phần khaacutec
Trong mocirc higravenh MVC caacutei yecircu cầu gửi đến (incoming request) được xử lyacute bởi caacutec bộ điều khiển
(controller) Mỗi phương thức cocircng khai (public method) trong controller được gọi lagrave một phương
thức hagravenh động (action method) nghĩa lagrave bạn coacute thể gọi noacute từ Web thocircng qua địa chỉ URL để
thực hiện một action Caacutec controller được đặt trong thư mục Controllers của project
Higravenh 3-11 MVC Core Pattern
Khi tạo mới Project mặc định Visual Studio luocircn tạo một controller Home đặt tecircn lagrave
HomeControllercs
using System using SystemCollectionsGeneric using SystemDiagnostics using SystemLinq using SystemThreadingTasks using MicrosoftAspNetCoreMvc using FirstWebAppModels namespace FirstWebAppControllers public class HomeController Controller public IActionResult Index() return View()
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 107
public IActionResult About() ViewData[Message] = Your application description page return View() public IActionResult Contact() ViewData[Message] = Your contact page return View() public IActionResult Error() return View(new ErrorViewModel RequestId = ActivityCurrentId HttpContextTraceIdentifier )
Thử viết thecircm một action Hello trong controller trecircn
Chạy ứng dụng thử kết nối địa chỉ httplocalhostltportgtHomeHello
Định tuyến ndash Routing
Để truy xuất đến action Index trong Home controller coacute caacutec caacutech sau
bull bull Home bull HomeIndex
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 108 Version 11 ndash 032019
Bởi vigrave action Index vagrave controller Home lagrave mặc định được khai baacuteo trong Startupcs
Nguyecircn tắc gọi 1 action trong MVC như sau
host[port]ControllerNameActionName
328 Thecircm mới Controller Controller lagrave thagravenh phần chứa caacutec Action lagrave caacutec phương thức điều khiển vagrave đaacutep ứng yecircu cầu từ
người dugraveng Phần hướng dẫn dưới đacircy giuacutep bạn thecircm mới một Controller vagrave một Action đơn
giản sau đoacute thử chạy để biết hoạt động của chuacuteng
Chuột phải vagraveo thư mục Controller chọn Add chọn Controller
Higravenh 3-12 Thecircm mới Controller
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 109
Higravenh 3-13 Chọn loại Controller trống
Higravenh 3-14 Đặt tecircn Controller
Chuacute yacute Tecircn controller phải coacute phần cuối ngữ lagrave Controller trường hợp nagravey HelloController Khi
dụng controller ta dugraveng tecircn Hello cograven tiếp cuối ngữ lagrave quy ước để hệ thống xử lyacute phiacutea hậu
trường
Higravenh 3-15 Thecircm mới một Action
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 110 Version 11 ndash 032019
Higravenh 3-16 Chạy action SayHello của controller Hello
329 Thecircm mới View Ở trecircn action SayHello return Content(rdquoWelcome to ASPNET Corerdquo) để hồi đaacutep yecircu cầu Kết quả
sẽ gửi về dograveng chữ rdquoWelcome to ASPNET Corerdquo như higravenh 39 Nếu muốn trả về một trang web
với nội dung phức tạp vagrave higravenh thức đẹp thigrave phải xacircy dựng một View riecircng để đaacutep ứng yecircu cầu
Luacutec đoacute action phải return View() thay vigrave Content()
Để tạo view cho Action chuột phải trecircn action chọn Add View
Higravenh 3-17 Thecircm View cho action
Lệnh return của Action coacute thể lựa chọn bất kỳ View tecircn gigrave để hiển thị nếu đưa tecircn View lagravem
tham số cho phương thức View()
Viacute dụ
bull return View(ldquoChaordquo) sẽ gọi view Chaocshtml
bull return View(ldquoSayHellordquo) sẽ gọi view SayHellocshtml
Trong trường hợp khocircng chỉ ra tecircn view cần gọi thigrave MVC hiểu tecircn view chiacutenh lagrave tecircn action Vigrave
vậy trường hợp higravenh 3-7 được hiểu lagrave return View(ldquoindexrdquo)
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 111
Higravenh 3-18 Đặt tecircn View
Nội dung View Index đơn giản chưa coacute dữ liệu từ CSDL chưa coacute tiacutenh thẩm mỹ cao sẽ được
khaacutem phaacute ở caacutec bagravei tiếp theo
Higravenh 3-19 Kết quả hiển thị
Nội dung
View
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 112 Version 11 ndash 032019
CONTROLLER
41 Cấu truacutec Controller Controller lagrave một class kế thừa từ Controller trong MVC Core Trong Controller coacute thể coacute nhiều
Action phục vụ yecircu cầu người dugraveng
public class HomeController Controller public IActionResult Index() return View() public IActionResult About() ViewData[Message] = Your application description page return View() public IActionResult Contact() ViewData[Message] = Your contact page return View() public string Hello() return Hello world Welcome ASPNET Core in Nhat Nghe
HomeController trecircn định nghĩa 4 action lagrave Index() About() Contact() vagrave Hello() Caacutec action
nagravey sẽ được phục vụ caacutec yecircu cầu từ người dugraveng thocircng qua caacutec url như sau
httplocalhost -gt Index()
httplocalhostHome -gt Index()
httplocalhostHomeIndex -gt Index()
httplocalhostHomeAbout -gt About()
httplocalhostHomeContact -gt Contact()
httplocalhostHomeHello -gt Hello()
42 Action Method Bất kỳ method public nagraveo được gọi từ Controller thigrave phải gọi phương thức Action cụ thể lagrave thocircng
qua đường dẫn URL trecircn trigravenh duyệt
Action Method thường gọi service layer để phản hồi yecircu cầu người dugraveng Service layer thường
truy vấn hoặc thay đổi cơ sở dữ liệu bằng caacutech sử dụng Data Access layer vagrave sau đoacute chuyển kết
quả trả về cho Model vagrave chuyển ngược lại cho phương thức Action
Một số lưu yacute khi tạo Action method
Luocircn lagrave public method khocircng thể lagrave static method hay extension method
Caacutec phương thức kế thừa trong Controller khocircng được xem lagrave action method
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 113
Tham số của action method khocircng lagrave ref out
Khocircng chứa thuộc tiacutenh [NonAction]
Khocircng thể overload caacutec phương thức action
43 Tiếp nhận tham số Khi yecircu cầu một action dữ liệu từ người dugraveng sẽ được chuyển cho caacutec action thocircng qua tham
số Tham số tồn tại dưới 2 dạng chuỗi truy vấn (sau dấu của url) hoặc caacutec trường trecircn form
Viacute dụ Gọi action vagrave truyền tham số với chuỗi truy vấn
Với action ChiTiet() như sau
public ActionResult ChiTiet(int id string TenLoai string MoTa) Loai loai = new Loai MaLoai = id TenLoai = TenLoai MoTa = MoTa return View(loai)
Thigrave liecircn kết tới
lta href=LoaiChiTietId=2ampTenLoai=BiaampMoTa=Bla-blagtChi tiếtltagt lta href=LoaiChiTiet2TenLoai=BiaampMoTa=Bla-blagtChi tiếtltagt
Theo định tuyến 2 liecircn kết trecircn coacute taacutec dụng như nhau lagrave đều gọi action ChiTiet() vagrave
truyền 3 tham số Id TenLoai MoTa
Viacute dụ Gọi action vagrave truyền tham số với caacutec trường form
ltform asp-action=Create asp-controller=Loaigt ltdiv asp-validation-summary=ModelOnly class=text-dangergtltdivgt ltdiv class=form-groupgt ltlabel class=control-labelgtTecircn loạiltlabelgt ltinput asp-for=TenLoai class=form-control gt ltspan asp-validation-for=TenLoai class=text-dangergtltspangt ltdivgt ltdiv class=form-groupgt ltlabel class=control-labelgtMocirc tảltlabelgt ltinput asp-for=MoTa class=form-control gt ltspan asp-validation-for=MoTa class=text-dangergtltspangt ltdivgt ltdiv class=form-groupgt ltinput type=submit value=Tạo mới class=btn btn-default gt ltdivgt ltformgt
Khi nhấn vagraveo nuacutet ldquoTạo mớirdquo thigrave yecircu cầu được gửi đến action Create() của controller
Loai() đồng thời chuyển caacutec tham số TenLoai MoTa cho action() nagravey
44 ActionResult Kết quả trả về của action lagrave ActionResult một kiểu dữ liệu chung chung từ kiểu đơn giản string
int hellip cho đến kiểu phức tạp như JSON html file (dugraveng để download)
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 114 Version 11 ndash 032019
IActionResult lagrave một Interface định nghĩa caacutec hợp đồng kết quả của ActionResult
ActionResult lagrave một lớp cơ sở trừu tượng cagravei đặt cho IActionResult Caacutec
ViewResult PartialViewResult JsonResult hellip đều kế thừa lớp ActionResult nagravey
Caacutec loại
Name Behavior ContentResult Content() trả về nội dung văn bản khocircng bao gồm layout phugrave
hợp cho việc test vagrave lagravem việc với ajax FileContentResult File() trả về nội dung file văn bản (khocircng bao gồm
layout) Viacute dụ return File(~downloadspdf-samplepdf applicationpdf)
hoặc public IActionResult FileContentResult() Get the byte array for the document var pdfBytes = SystemIOFileReadAllBytes(wwwrootdownloadspdf-
samplepdf) FileContentResult needs a byte array and returns a
file with the specified content type return new FileContentResult(pdfBytes applicationpdf)
FilePathResult
FileStreamResult
EmptyResult Empty() Khocircng trả về gigrave cả
JavaScriptResult JavaScript() trả về matilde javascript phugrave hợp với tương taacutec ajax
JsonResult Json() trả về dữ liệu dạng JSON Viacute dụ public IActionResult JsonResult() return Json(new message = This is a JSON
result date = DateTimeNow )
RedirectToResult RedirectTo() Chuyển đến địa chỉ URL chỉ định Viacute dụ return Redirect(httpswwwexceptionnotfoundnet)
return LocalRedirect(redirectstarget
return RedirectToAction(target)
HttpUnauthorizedResult Trả về matilde trạng thaacutei HTTP 403
RedirectToRouteResult Redirect to different action different controller action Viacute dụ return RedirectToRoute(default new action = target controller = redirects )
ViewResult View() lựa chọn View để hiển thị được bao bọc bởi layout
PartialViewResult PartialView() lựa chọn View để hiển thị KHOcircNG được bao bọc bởi layout phugrave hợp với module hoacutea giao diện hoặc lagravem việc với ajax
Viacute dụ public class SampleController Controller public string SayHello()
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 115
return Hello ASPNET Core public double Add(double a double b) return a + b public IActionResult CylinderVolume(double r double h) double v = MathPI MathPow(r 2) h return new JsonResult(v)
Khi khai baacuteo kiểu IActionResult coacute thể trả về kiểu dữ liệu tugravey yacute
Gọi caacutec action như sau
bull httplocalhost5000samplesayhello
bull httplocalhost5000sampleadda=10ampb=20
bull httplocalhost5000samplecylindervolumer=10amph=20
Ngoagravei ra coacute thể trả về caacutec matilde trạng thaacutei (Status Code Result) như
bull OkResult trả về matilde 200 OK Viacute dụ return Ok()
public IActionResult OkResult()
return Ok()
bull CreatedResult trả về matilde 201 Viacute dụ
public IActionResult CreatedResult()
return Created(httpexampleorgmyitem new name = testitem
)
bull NoContentResult trả về matilde 204 ndash NoContent Status Viacute dụ
public IActionResult NoContentResult()
return NoContent()
bull BadRequestResult trả về matilde 400 ndash Bad Request Viacute dụ
public IActionResult BadRequestResult()
return BadRequest()
bull UnauthorizedResult trả về matilde 401
public IActionResult UnauthorizedResult()
return Unauthorized()
bull NotFoundResult trả về matilde 404
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 116 Version 11 ndash 032019
public IActionResult NotFoundResult()
return NotFound()
45 Routing
451 Routing Routing lagrave quaacute trigravenh magrave ASPNET Core kiểm tra caacutec URL đến vagrave aacutenh xạ chuacuteng vagraveo caacutec controller
action tương ứng Ngoagravei ra routing cograven để sinh caacutec URL đi Quaacute trigravenh route được xử lyacute bởi Routing
Middle coacute sẵn trong namespace MicrosoftAspNetCoreRouting
Higravenh 3-20 Nhiệm vụ của Routing
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 117
Higravenh 3-21 Sơ đồ hoạt động của Routing
Khi coacute một yecircu cầu Routing Middleware thực hiện như sau
Phacircn tiacutech cuacute phaacutep URL
Tigravem kiếm định tuyến phugrave hợp trong RouteCollection
Nếu tigravem thấy sẽ chuyển đến RouteHandle nếu khocircng tigravem thấy sẽ bỏ vagrave thực thi
Middleware tiếp theo
Mỗi Route bao gồm tecircn (Name) URL Pattern (Template) Defaults vagrave Constraints URL
Pattern nhằm so khớp yecircu cầu gửi đến từ URL viacute dụ controller=Homeaction=Indexid
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 118 Version 11 ndash 032019
Trong phần URL Pattern coacute dấu để xaacutec định tugravey chọn hay khocircng
Việc định nghĩa caacutec route nằm trong hagravem Configure của lớp StarpUp (StartUpcs)
Viacute dụ
routesMapRoute(default controller=Homeaction=Index)
sẽ map với
URL MATCH PARSED AS
Yes Controller=Home Action=Index
Home Yes Controller=Home Action=Index
HomeIndex Yes Controller=Home Action=Index
Cograven định nghĩa route như sau
routesMapRoute(default admincontroller=Homeaction=Index)
sẽ map với
URL MATCH PARSED AS
No No defaults for admin Hence first segment is mandatory
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 119
URL MATCH PARSED AS
Home Yes The First segment Home matches to the Admin
Admin=Home Controller=Home Action=Index
Abc Yes Admin=Abc Controller=Home Action=Index
HomeIndex No Admin=Home Controller=Index There is No IndexController Hence it fails
XyzHome Yes Admin=Xyz Controller=Home Action=Index
AdminHome Yes Admin=Admin Controller=Home Action=Index
Viacute dụ 3 routesMapRoute(default admincontroller=Homeaction=Index)
URL MATCH PARSED AS
No because First segment is mandatory
Home No The first segment must contain the word Admin
Abc No The first segment must contain the word Admin
Admin Yes Controller=Home Action=Index
AdminHome Yes Controller=Home Action=Index
452 Attribute Routing Bạn coacute thể thecircm caacutec thuộc tiacutenh chỉ định Route trực tiếp trước caacutec Action
[Route(Home)] public string Index() return Hello from Index method of Home Controller
Khi gọi URL Home thigrave action Index của controller Home được thực thi
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 120 Version 11 ndash 032019
URL MATCH PARSED AS
No
Home Yes Controller=Home Action=Index
HomeIndex No
Thecircm action vagraveo route property
[Route(HomeIndex)] public string Index() return Hello from Index method of Home Controller
URL MATCH PARSED AS
No
Home No
HomeIndex Yes Controller=Home Action=Index
Viacute dụ 3
[Route(SayHello)] public string Index() return Hello from Index method of Home Controller
URL MATCH PARSED AS
No
Home No
HomeIndex No
SayHello Yes Controller=Home Action=Index
Multiple Routes coacute thể aacutep dụng nhiều route cho cugraveng một action
[Route()] [Route(Home)]
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 121
[Route(HomeIndex)] public string Index() return Hello from Index method of Home Controller
URL MATCH PARSED AS
Yes Controller=Home Action=Index
Home Yes Controller=Home Action=Index
HomeIndex Yes Controller=Home Action=Index
SayHello No
[Route(HomeIndexidint)] public string Index(int id) return I got + idToString()
46 Action Selector Action Selector lagrave thuộc tiacutenh được aacutep dụng cho action method của controller giuacutep cho bộ định
tuyến chọn đuacuteng phương thức action để xử lyacute cho URL đatilde cho Action Selector bao gồm Action
Name Non Action vagrave Action Verb
Viacute dụ 1 Cần truy cập URL httphostHomeModify coacute 2 caacutech dưới đacircy tương đương nhau
[ActionName(Modify)] public string Edit() return Hello from Edit Method
Lagrave tương đương với
[Route(HomeModify)] public string Edit() return Hello from Edit Method
Viacute dụ 2 Chỉ định phương thức NonAction
[NonAction] public string Edit() return Hello from Edit Method
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 122 Version 11 ndash 032019
Viacute dụ 3 Sử dụng caacutec động từ HTTP Verbs như GET POST PUT DELETE HEAD OPTIONS
PATCH
[HttpGet] public ActionResult Edit(string id) Return the Edit Form return View() [HttpPost] public ActionResult Edit(Loai Model) Update the database here return View()
Viacute dụ 4 Cho pheacutep sử dụng nhiều Verb cugraveng luacutec
[AcceptVerbs(HttpVerbsGet | HttpVerbsPost)] public ActionResult AboutUs() return View()
47 Bagravei tập Ứng dụng
471 Maacutey tiacutenh caacute nhacircn MOcirc TẢ
Xacircy dựng trang ứng dụng cho pheacutep thực hiện caacutec pheacutep tiacutenh đơn giản như cộng trừ nhacircn
vagrave chia coacute giao diện như higravenh sau Khi người dugraveng nhập caacutec toaacuten hạng vagrave chọn toaacuten tử thực hiện
sau đoacute nhấp nuacutet [=] thigrave chương trigravenh sẽ thực hiện pheacutep tiacutenh vagrave hiển thị kết quả lecircn ocirc nhập [Kết
quả]
Để hoagraven thiện bagravei nagravey bạn cần thực hiện caacutec bước sau
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 123
Bước 1 Tạo controller CalculatorController
Bước 2 Xacircy dựng giao diện
Bước 3 Thecircm action Calculate để thực hiện pheacutep tiacutenh
Bước 4 Hiển thị kết quả
Bước 1 Tạo controller CalculatorController
public class CalculatorController Controller public IActionResult Index() return View()
Bước 2 Xacircy dựng giao diện
Phải chuột lecircn action Index() để thecircm giao diện cho action nagravey vagrave viết matilde Razor như sau
Giao diện gồm form coacute action gọi đến action Calculate() của controller CalculatorController vagrave
truyền cho action nagravey 3 tham số a (toaacuten hạng a) b (toaacuten hạng b) vagrave op (toaacuten tử op) Đồng thời
form nagravey cũng hiển thị giaacute trị của thuộc tiacutenh ViewBagKetQua lecircn ocirc nhập kết quả
Bước 3 Thecircm action Calculate để thực hiện pheacutep tiacutenh
Để xử lyacute form bạn cần bổ sung action Calculate() vagraveo controller CalculatorController để tiếp nhận
tham số thực hiện việc tiacutenh toaacuten sau đoacute truyền kết quả về form nagravey để hiển thị kết quả
public ActionResult Calculate(double a = 0 double b = 0 char op = +) switch (op) case + ViewBagKetQua = a + b
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 124 Version 11 ndash 032019
break case - ViewBagKetQua = a - b break case x ViewBagKetQua = a b break case ViewBagKetQua = a b break return View(Index)
Ở đacircy chuacuteng ta sử dụng phương phaacutep nhận tham số bằng đối số action Như vậy caacutec trường
form a b vagrave op được chuyển vagraveo caacutec đối số của action vagrave tự động chuyển đổi sang kiểu phugrave
hợp Việc cograven lại lagrave xeacutet xem toaacuten tử được chọn lagrave gigrave để thực hiện pheacutep toaacuten
Kết quả thực hiện được lưu vagraveo thuộc tiacutenh động KetQua của đối tượng ViewBag để được truyền
cho view sử dụng sau nagravey
Với dograveng lệnh return View(ldquoIndexrdquo) ở cuối action thigrave View Indexcshtml được chọn để hiển thị
Trong form của view nagravey coacute dograveng matilde HTML lagrave ltinput placeholder=Kết quả
value=ViewBagKetQua gt do đoacute kết quả sẽ được hiện thị vagraveo đuacuteng ocirc kết quả
Bước 4 Hiển thị kết quả
Giao diện sau được thực hiện sau khi nhập 5 vagrave a vagrave 8 vagraveo b vagrave chọn toaacuten tử lagrave x sau đoacute nhấp
nuacutet [=] 40 sẽ hiển thị lecircn ocirc kết quả
Chuacuteng ta thấy rằng giaacute trị của caacutec toaacuten hạng cũng như toaacuten tử bị bất sau khi bấm nuacutet [=] Muốn
giữ được caacutec giaacute trị nagravey lại chuacuteng ta phải sử dụng caacutec Helper do MVC cung cấp (sẽ được học ở
caacutec bagravei sau)
472 Đọc ghi file MỤC TIEcircU
Kết thuacutec bagravei thực hagravenh bạn coacute khả năng
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 125
bull Kết hợp đối số vagrave model để nhận tham số
bull Đọcghi mảng từvagraveo file văn bản
MOcirc TẢ
Cụ thể trong bagravei nagravey bạn phải xacircy dựng trang web coacute higravenh minh họa sau Sau khi nhập dữ liệu
vagraveo form vagrave nhấp nuacutet [Lưu] ứng dụng sẽ lưu thocircng tin vagraveo file coacute tecircn Studenttxt đặt tại thư
mục gốc của website (wwwroot)
Sau khi đatilde lưu 1 lần bạn coacute thể đọc dữ liệu từ file vagrave hiển thị lecircn form bằng caacutech nhấp nuacutet
[Mở]
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 126 Version 11 ndash 032019
THỰC HIỆN
Để thực hiện ứng dụng trecircn bạn cần thực hiện theo caacutec bước sau
Bước 1 Tạo controller StudentControllercs
public class StudentController Controller public IActionResult Index() return View()
Bước 2 Tạo giao diện form nhập
Phải chuột vagraveo action Index() vagrave tạo view coacute matilde razor như sau Matilde gồm 1 form coacute action gọi
đến action Manage() của controller StudentController vagrave chuyển caacutec trường Id Name Marks vagrave
nuacutet command được nhấp đến action nagravey
Form cũng hiecircn thị caacutec thuộc tiacutenh Id Name Marks vagrave Message của ViewBag được chuyển từ
controller lecircn caacutec trường form vagrave thocircng baacuteo cuối form
ViewData[Title] = ĐọcGhi file Layout = ~ViewsShared_Layoutcshtml lth2gtĐọcghi filelth2gt ltform asp-action=Manage asp-controller=Student method=postgt
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 127
ltdivgtMatilde sinh viecircnltdivgt ltinput name=Id value=ViewBagId gt ltdivgtHọ vagrave tecircnltdivgt ltinput name=Name value=ViewBagName gt ltdivgtĐiểm trung bigravenhltdivgt ltinput name=Marks value=ViewBagMarks gt lthr gt ltinput type=submit value=Lưu name=command gt ltinput type=submit value=Mở name=command gt ltformgt lth4gtViewBagMessagelth4gt
Bước 3 Tạo lớp model StudentInfocs
Lớp model nagravey được sử dụng để nhận dữ liệu từ form Caacutec tham số sẽ chuyển vagraveo caacutec thuộc tiacutenh
cugraveng tecircn của model
public class StudentInfo public string Id get set public string Name get set public double Marks get set
Bước 4 Bổ sung action Manage() vagraveo controller để điều khiển hagravenh động [Lưu] vagrave [Mở]
Action Manage() sử dụng model để nhận thocircng tin nhacircn viecircn vagrave đối số command để nhận nuacutet
submit bị nhấp Action sẽ phacircn biệt 2 trường hợp dựa vagraveo giaacute trị của nuacutet nhấn
Nếu nhấn nuacutet [Lưu] thigrave thực hiện lưu model vagraveo file Phương thức
SystemIOFileWriteAllLines(path lines) sẽ lưu mảng vagraveo file Mỗi phần tử mảng lưu trecircn một
hagraveng
Nếu nhấn nuacutet [Mở+ thigrave đọc dữ liệu từ file vagrave truyền cho view thocircng qua caacutec thuộc tiacutenh Id Name
vagrave Marks của ViewBag Phương thức SystemIOFileReadAllLines(path) giuacutep đọc mảng chuỗi từ
file Cứ mỗi hagraveng sẽ đọc thagravenh 1 phần tử của mảng
Bổ sung action Manage() để mở vagrave đọc file
public ActionResult Manage(StudentInfo model String command) var path = PathCombine(DirectoryGetCurrentDirectory() wwwroot Studenttxt) if (command == Lưu) String[] lines = modelId modelName modelMarksToString()
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 128 Version 11 ndash 032019
SystemIOFileWriteAllLines(path lines) ViewBagMessage = Đatilde ghi vagraveo file else if (command == Mở) String[] lines = SystemIOFileReadAllLines(path) ViewBagId = lines[0] ViewBagName = lines[1] ViewBagMarks = ConvertToDouble(lines[2]) ViewBagMessage = Đatilde đọc từ file return View(Index)
Bước 5 Chạy ứng dụng
Chạy httplocalhost55287StudentIndex
Nhập thocircng tin vagrave nhấp nuacutet Lưu+ sau đoacute kiểm tra thocircng tin của file được tạo ra ở thư mục
gốc của website
Nhấp nuacutet [Mở+ để hiển thị lại thocircng tin đatilde nhập
473 Upload file Kết thuacutec bagravei thực hagravenh bạn coacute khả năng
bull Tạo form upload file
bull Tiếp nhận file upload vagrave lưu vagraveo thư mục với tecircn file gốc
bull Hiển thị thocircng tin file upload
Bước 1 Cấu higravenh Startupcs
Để dễ dagraveng thao taacutec trecircn thư mục wwwroot bạn thecircm phần cấu higravenh sau vagraveo hagravem
ConfigureServices()
public void ConfigureServices(IServiceCollection services) servicesAddSingletonltIFileProvidergt( new PhysicalFileProvider( PathCombine(DirectoryGetCurrentDirectory() wwwroot))) servicesAddMvc()
Bước 2 Tạo FileUploadController
public class FileUploadController Controller private readonly IFileProvider fileProvider public FileUploadController(IFileProvider fileProvider) thisfileProvider = fileProvider
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 129
public IActionResult Index() return View()
Bước 3 Tạo form upload file
Ở View Index() nagravey sẽ thiết kế 3 form riecircng biệt dugraveng để upload một file upload nhiều file vagrave
upload file dựa vagraveo Model Đặc biệt form upload luocircn luocircn phải thiết lập giaacute trị của thuộc tiacutenh
method lagrave POST vagrave enctype lagrave MULTIPARTFORM-DATA
ViewData[Title] = Upload file Layout = ~ViewsShared_Layoutcshtml lth2gtUpload filelth2gt ltform asp-controller=FileUpload asp-action=UploadFile method=post enctype=multipartform-data class=form-inlinegt lth4gtUpload single-filelth4gt ltinput type=file name=file gt ltbutton type=submitgtUpload Fileltbuttongt ltformgt lthr gt ltform asp-controller=FileUpload asp-action=UploadFiles method=post enctype=multipartform-datagt lth4gtUpload multi-fileslth4gt ltinput type=file name=files multiple gt ltbutton type=submitgtUpload Filesltbuttongt ltformgt lthr gt ltform asp-controller=FileUpload asp-action=UploadFileViaModel method=post enctype=multipartform-data class=form-inlinegt ltinput type=file name=FileToUpload gt ltbutton type=submitgtUpload File (model)ltbuttongt ltformgt
Bước 4 Bổ sung caacutec action UploadFile() UploadFiles()UploadFileViaModel() vagraveo
controller
Tất cả caacutec tập tin upload lecircn đều lưu vagraveo thư mục UploadFiles trong wwwroot
[HttpPost] public async TaskltIActionResultgt UploadFile(IFormFile file)
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 130 Version 11 ndash 032019
if (file == null || fileLength == 0) return Content(file not selected) var path = PathCombine( DirectoryGetCurrentDirectory() wwwroot UploadFiles fileGetFilename()) using (var stream = new FileStream(path FileModeCreate)) await fileCopyToAsync(stream) return RedirectToAction(ListFiles) [HttpPost] public async TaskltIActionResultgt UploadFiles(ListltIFormFilegt files) if (files == null || filesCount == 0) return Content(files not selected) foreach (var file in files) var path = PathCombine( DirectoryGetCurrentDirectory() wwwroot UploadFiles fileGetFilename()) using (var stream = new FileStream(path FileModeCreate)) await fileCopyToAsync(stream) return RedirectToAction(ListFiles)
[HttpPost] public async TaskltIActionResultgt UploadFileViaModel(FileInputModel model) if (model == null || modelFileToUpload == null || modelFileToUploadLength == 0) return Content(file not selected) var path = PathCombine( DirectoryGetCurrentDirectory() wwwroot UploadFiles
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 131
modelFileToUploadGetFilename()) using (var stream = new FileStream(path FileModeCreate)) await modelFileToUploadCopyToAsync(stream) return RedirectToAction(ListFiles)
Tất cả caacutec action trecircn sau khi xử lyacute xong đều gửi tới action ListFiles() để hiển thị danh saacutech file
trong thư mục chỉ định thocircng qua lệnh return RedirectToAction(ListFiles)
Chuacute yacute
Action UploadFile() để xử lyacute upload một file thigrave tham số truyền vagraveo lagrave biến đơn
IFormFile file file chiacutenh lagrave tecircn control input[type=file]
Action UploadFiles() để xử lyacute upload nhiều file thigrave tham số truyền vagraveo lagrave danh saacutech
ListltIFormFilegt files files chiacutenh lagrave tecircn control input[type=file]
Action UploadFileViaModel() xử lyacute upload file qua model cần truyền vagraveo biến model
FileInputModel model trong đoacute lớp FileInputModel định nghĩa như sau
public class FileInputModel
public IFormFile FileToUpload get set
vagrave FileToUpload chiacutenh lagrave tecircn của control input[type=file]
Bước 5 Bổ sung action ListFile()
public IActionResult ListFiles() var model = new FilesViewModel() foreach (var item in thisfileProviderGetDirectoryContents(UploadFiles)) modelFilesAdd( new FileDetails Name = itemName Path = itemPhysicalPath ) return View(model)
Model chuyển qua chứa thocircng tin tecircn file vagrave đường dẫn Do đoacute cần định nghĩa thecircm caacutec lớp để
lưu caacutec thocircng tin nagravey
public class FileDetails public string Name get set public string Path get set public class FilesViewModel public ListltFileDetailsgt Files get set = new ListltFileDetailsgt()
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 132 Version 11 ndash 032019
Nội dung view ListFilescshtml dugraveng để hiển thị thocircng tin file coacute trong thư mục như sau
Bước 6 Thực nghiệm
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 133
TỔ CHỨC WEBSITE
51 Caacutec thagravenh phần layout
511 Giới thiệu Trong mỗi website thường giao diện của một vagravei nhoacutem trang coacute cấu truacutec tương tự nhau chỉ khaacutec
nhau ở phần dữ liệu thay đổi Vigrave vậy nếu tạo caacutec trang riecircng rẽ sẽ tốn nhiều thời gian Nếu coacute
sai soacutet cần thay đổi sẽ phải thay đổi ở tất cả caacutec trang con vigrave vậy việc quản lyacute caacutec giao diện nagravey
gặp nhiều khoacute khăn
Từ đoacute khaacutei niệm Layout sẽ giải quyết vấn đề trecircn Layout lagrave giao diện của trang web thường
mỗi trang coacute những phần giống nhau như header footer menu
View lagrave thagravenh phần hiển thị tương taacutec trực tiếp với người dugraveng Trong phần nagravey sẽ tổ chức bố
cục caacutec thagravenh phần layout vagrave thiết lập caacutec lệnh dugraveng chung trước khi render xuống ứng dụng
Higravenh 5-1 Caacutec thagravenh phần layout
Theo quy ước tập tin giao diện dugraveng chung thường nằm trong thư mục ViewsShared của ứng
dụng Khi tạo project ta coacute sẵn file _Layoutcshtml
Sau khi học xong bagravei nagravey học viecircn coacute khả năng
minus Xacircy dựng layout cho ứng dụng Web MVC
minus Đoacuteng vagrave sử dụng caacutec goacutei tagravei nguyecircn đatilde đoacuteng
minus Mocirc đun hoacutea giao diện để quản lyacute vagrave sử dụng lại
minus Phacircn quyền ứng dụng vagrave định tuyến theo namespace
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 134 Version 11 ndash 032019
File nagravey sẽ định nghĩa template level top Coacute thể một số view khocircng cần layout template vagrave cũng
coacute view xaacutec định từ layout template riecircng rẻ cho từng trường hợp cụ thể
Viacute dụ file _Layoutcshtml mẫu
ltDOCTYPE htmlgt lthtmlgt ltheadgt ltmeta charset=utf-8 gt ltmeta name=viewport content=width=device-width initial-scale=10 gt lttitlegtViewData[Title] - FirstWebApplttitlegt ltenvironment include=Developmentgt ltlink rel=stylesheet href=~libbootstrapdistcssbootstrapcss gt ltlink rel=stylesheet href=~csssitecss gt ltenvironmentgt ltenvironment exclude=Developmentgt ltlink rel=stylesheet href=httpsajaxaspnetcdncomajaxbootstrap337cssbootstrapmincss asp-fallback-href=~libbootstrapdistcssbootstrapmincss asp-fallback-test-class=sr-only asp-fallback-test-property=position asp-fallback-test-value=absolute gt ltlink rel=stylesheet href=~csssitemincss asp-append-version=true gt ltenvironmentgt ltheadgt ltbodygt ltnav class=navbar navbar-inverse navbar-fixed-topgt ltdiv class=containergt ltdiv class=navbar-headergt ltbutton type=button class=navbar-toggle data-toggle=collapse data-target=navbar-collapsegt ltspan class=sr-onlygtToggle navigationltspangt ltspan class=icon-bargtltspangt ltspan class=icon-bargtltspangt ltspan class=icon-bargtltspangt ltbuttongt lta asp-area= asp-controller=Home asp-action=Index class=navbar-brandgtFirstWebAppltagt ltdivgt ltdiv class=navbar-collapse collapsegt ltul class=nav navbar-navgt ltligtlta asp-area= asp-controller=Home asp-action=IndexgtHomeltagtltligt ltligtlta asp-area= asp-controller=Home asp-action=AboutgtAboutltagtltligt
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 135
ltligtlta asp-area= asp-controller=Home asp-action=ContactgtContactltagtltligt ltulgt ltdivgt ltdivgt ltnavgt ltdiv class=container body-contentgt
RenderBody() lthr gt ltfootergt ltpgtampcopy 2018 - FirstWebAppltpgt ltfootergt ltdivgt ltenvironment include=Developmentgt ltscript src=~libjquerydistjqueryjsgtltscriptgt ltscript src=~libbootstrapdistjsbootstrapjsgtltscriptgt ltscript src=~jssitejs asp-append-version=truegtltscriptgt ltenvironmentgt ltenvironment exclude=Developmentgt ltscript src=httpsajaxaspnetcdncomajaxjqueryjquery-220minjs asp-fallback-src=~libjquerydistjqueryminjs asp-fallback-test=windowjQuery crossorigin=anonymous integrity=sha384-K+ctZQ+LL8q6tP7I94W+qzQsfRV2a+AfHIi9k8z8l9ggpc8X+Ytst4yBohH+8Fkgt ltscriptgt ltscript src=httpsajaxaspnetcdncomajaxbootstrap337bootstrapminjs asp-fallback-src=~libbootstrapdistjsbootstrapminjs asp-fallback-test=windowjQuery ampamp windowjQueryfn ampamp windowjQueryfnmodal crossorigin=anonymous integrity=sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txagt ltscriptgt ltscript src=~jssiteminjs asp-append-version=truegtltscriptgt ltenvironmentgt
RenderSection(Scripts required false) ltbodygt lthtmlgt
512 Đaacutenh dấu vugraveng động Bạn coacute thể thiết kế trang layout như mọi trang bigravenh thường khaacutec Sự khắc biệt ở trang layout lagrave
việc đaacutenh dấu caacutec vị triacute hiển thị dữ liệu của caacutec trang thagravenh viecircn Trong MVC bạn dugraveng caacutec chỉ
thị vagrave thuộc tiacutenh động sau đacircy để đaacutenh dấu
Chỉ thịThuộc tiacutenh động Mocirc tả
RenderBody() Vị triacute đặt nội dung trang
RenderSection() Vị triacute đặt nội dung vugraveng
ViewBagltPropertygt Viacute trị đặt giaacute trị thuộc tiacutenh động trong ViewBag
Coacute thể cung cấp dữ liệu cho caacutec vugraveng đaacutenh dấu trecircn layout được thể hiện như sau bull Giaacute trị thuộc tiacutenh động của ViewBagXYZ sẽ được đặt vagraveo đuacuteng vị triacute ViewBagXYZ
trong layout
bull section xyxdata của view sẽ được đặt vagraveo vị triacute Renderection(xyz) của layout
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 136 Version 11 ndash 032019
bull Tất cả caacutec phần dữ liệu cograven lại của view sẽ được đặt vagraveo RenderBody() của layout
bull Caacutec thagravenh phần Layout RenderBody() vagrave RenderSection()
Layout view lagrave một Razor view với phần mở rộng lagrave cshtml
Chỉ định bố cục Sử dụng thuộc tiacutenh Layout để chỉ định template cần dugraveng Viacute dụ
Layout = _Layout
513 Tập tin _ViewStartcshtml _ViewImportscshtml Bất kỳ một LayoutView nagraveo cũng luocircn tigravem đến tập tin _ViewStartcshtml để thực thi matilde becircn trong
file nagravey trước khi thực thi matilde của chiacutenh layout view đoacute Vigrave vậy để chuẩn bị những gigrave chung cho
tất cả caacutec view bạn necircn đặt matilde ở tập tin _ViewStartcshml
Viacute dụ tập tin _ViewStartcshtml chegraven đoạn lệnh khai baacuteo sử dụng layout chung lagrave _Layoutcshtml
như sau
Layout View
RenderBody()
ViewBagXYZ
RenderSection()
Data
ViewBagXYZ
Section
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 137
Tương tự caacutec View coacute chegraven khai baacuteo đoạn matilde chung thigrave bỏ vagraveo _ViewImportscshtml
52 Bundles ndash đoacuteng goacutei tagravei nguyecircn css vagrave javascript Trong layout thocircng thường bạn phải chuẩn bị đủ caacutec tagravei nguyecircn css vagrave script cần thiết cho caacutec
trang thagravenh viecircn Cũng như mọi trang web khaacutec bạn chỉ việc nhuacuteng caacutec tagravei nguyecircn nagravey bằng
caacutec thẻ ltlinkgt vagrave ltscriptgt lagrave được
ltlink rel=stylesheet href=~libbootstrapdistcssbootstrapcss gt ltlink rel=stylesheet href=~csssitecss gt
ltscript src=~libjquerydistjqueryjsgtltscriptgt ltscript src=~libbootstrapdistjsbootstrapjsgtltscriptgt ltscript src=~jssitejs asp-append-version=truegtltscriptgt
Tuy nhiecircn với MVC bạn coacute caacutech lagravem khaacutec khoa học hơn vagrave dễ quản lyacute hơn rất nhiều đoacute lagrave đoacuteng
goacutei caacutec tagravei nguyecircn liecircn quan sau đoacute nhuacuteng goacutei tagravei nguyecircn đoacute vagraveo
Bundling vagrave minification lagrave gigrave
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 138 Version 11 ndash 032019
Đoacuteng goacutei vagrave ruacutet gọn lagrave hai tối ưu hoacutea hiệu suất riecircng biệt magrave bạn coacute thể aacutep dụng trong ứng dụng
web Được sử dụng cugraveng nhau goacutei vagrave ruacutet gọn sẽ cải thiện hiệu suất bằng caacutech giảm số lượng
yecircu cầu maacutey chủ vagrave giảm kiacutech thước của nội dung tĩnh được yecircu cầu
Để đoacuteng goacutei javascript bạn sử dụng ScriptBundle cograven với CSS thugrave dugraveng StyleBundle
Bundling ndash Đoacuteng goacutei
Bundling kết hợp nhiều tập tin vagraveo một tập tin duy nhất Tiacutenh năng nhoacutem giảm số lượng yecircu cầu
maacutey chủ cần thiết để hiển thị nội dung web chẳng hạn như trang web Bạn coacute thể tạo bất kỳ số
goacutei riecircng lẻ nagraveo cho CSS JavaScript vv Iacutet tệp hơn coacute nghĩa lagrave iacutet yecircu cầu HTTP hơn từ trigravenh
duyệt đến maacutey chủ hoặc từ dịch vụ cung cấp ứng dụng của bạn Điều nagravey giuacutep cải thiện hiệu
suất tải trang đầu tiecircn
Minification ndash Tối thiểu hoacutea
Việc ruacutet gọn sẽ xoacutea caacutec kyacute tự khocircng cần thiết khỏi matilde magrave khocircng cần thay đổi chức năng Kết
quả lagrave giảm kiacutech thước đaacuteng kể trong caacutec nội dung được yecircu cầu (chẳng hạn như tệp CSS higravenh
ảnh vagrave JavaScript) Taacutec dụng phụ thường gặp của việc ruacutet gọn bao gồm ruacutet ngắn tecircn biến thagravenh
một kyacute tự vagrave xoacutea nhận xeacutet cũng như khoảng trắng khocircng cần thiết
Xem xeacutet đoạn matilde javascript dưới đacircy
AddAltToImg = function (imageTagAndImageID imageContext) ltsignaturegt ltsummarygt Adds an alt tab to the image ltsummarygt ltparam name=imgElement type=StringgtThe image selectorltparamgt ltparam name=ContextForImage type=StringgtThe image contextltparamgt ltsignaturegt var imageElement = $(imageTagAndImageID imageContext) imageElementattr(alt imageElementattr(id)replace(ID ))
Sẽ được ruacutet gọn thagravenh
AddAltToImg=function(nt)var i=$(nt)iattr(altiattr(id)replace(ID))
Cấu higravenh đoacuteng goacutei vagrave ruacutet gọn
Caacutec mẫu dự aacuten MVC vagrave Razor Pages cung cấp tập tin cấu higravenh bundleconfigjson xaacutec định caacutec
tugravey chọn cho mỗi goacutei Theo mặc định một cấu higravenh goacutei đơn được xaacutec định cho caacutec tệp JavaScript
tugravey chỉnh (wwwroot js sitejs) vagrave tệp định kiểu (wwwroot css sitecss)
Configure bundling and minification for the project More info at httpsgomicrosoftcomfwlinkLinkId=808241 [ outputFileName wwwrootcsssitemincss An array of relative input file paths Globbing patterns supported inputFiles [ wwwrootcsssitecss ]
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 139
outputFileName wwwrootjssiteminjs inputFiles [ wwwrootjssitejs ] Optionally specify minification options minify enabled true renameLocals true Optionally generate map file sourceMap false ]
53 Module hoacutea giao diện Khi giao diện quaacute phức tạp hoặc cần sử dụng lại một số thagravenh phần giao diện thigrave cần module
hoacutea caacutec thagravenh phần giao diện
Trong MVC bạn coacute thể taacutech caacutec module giao diện trecircn caacutec file riecircng biệt sau đoacute lắp trở lại thocircng
qua 2 HTML helper sau HtmlPartial() vagrave HtmlPartialAsync()
531 Sử dụng Partial View Giả sử đatilde định nghĩa PartialView coacute tecircn AuthorPartialcshml Để chegraven vagraveo View coacute caacutec caacutech
sau
Caacutec caacutech sử dụng một PartialView
Nếu view cugraveng thư mục hoặc nằm trong thư mục Shared await HtmlPartialAsync(AuthorPartial ) hoặc await HtmlRenderPartialAsync(AuthorPartial)
Nếu view cugraveng thư mục await HtmlPartialAsync(AuthorPartialcshtml) Xaacutec định view thocircng qua thư mục root sử dụng hoặc ~ await HtmlPartialAsync(~ViewsFolderAuthorPartialcshtml) await HtmlPartialAsync(ViewsFolderAuthorPartialcshtml) Xaacutec định view thocircng qua địa chỉ tương đối await HtmlPartialAsync(AccountAuthorPartialcshtml)
Viacute dụ
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 140 Version 11 ndash 032019
Caacutec bước thực hiện
Tạo view _CartInfocshtml
Tạo view _Categorycshtml
Thiết kế layout vagrave nhuacuteng caacutec thagravenh phần giao diện vagraveo layout
THỰC HIỆN
Bước 1 Tạo view _CartInfocshtml trong ViewsShared
Giao diện nagravey chỉ gồm 1 ảnh vagrave 2 thocircng tin tổng hợp của giỏ hagraveng lagrave số mặt hagraveng vagrave tổng tiền
ltstylegt nn-cart ul padding 0px margin 0px list-style none padding-top 3px nn-cart img width 100 ltstylegt
ltdiv class=panel panel-default nn-cartgt ltdiv class=panel-bodygt lta class=col-md-5 asp-controller=ShoppingCart asp-action=Indexgt ltimg src=~imagesshopping_cartpng gt ltagt ltul class=col-md-7gt ltligt100 itemsltligt ltligt$ 568ltligt ltulgt ltdivgt ltdivgt
await HtmlPartialAsync(_CartInfo)
await HtmlPartialAsync(_Category data)
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 141
Bước 2 Tạo view _Categorycshtml trong ViewsShared
model String[] ltdiv class=panel panel-defaultgt ltdiv class=panel-headinggt ltspan class=glyphicon glyphicon-th-listgtltspangt ltstronggtCategoriesltstronggt ltdivgt ltdiv class=list-groupgt foreach (var cate in Model) lta href= class=list-group-itemgtcateltagt ltdivgt ltdivgt
Bước 3 Thiết kế layout
Bạn hatildey thiết kế lại phần thẻ divbody-content để chia giao diện thagravenh 2 phần (9 cột vagrave 3 cột)
Phần đầu chứa nội dung trang web RenderBody() phần cograven lại nhuacuteng partial view vagrave action đatilde
tạo ra ở trecircn vagraveo
Ngoagravei ra trong layout nagravey bạn cograven tigravem thấy một partial view khaacutec cũng được nhuacuteng vagraveo lagrave
_LoginPartialView Chuacuteng ta sẽ tigravem hiển view nagravey ở phần security của bagravei học sau nagravey
ltdiv class=container body-contentgt ltarticle class=col-md-9gtRenderBody()ltarticlegt ltarticle class=col-md-3gt await HtmlPartialAsync(_CartInfo) await HtmlPartialAsync(_Category new string[]Phone Tablet Tivi Fan Others) ltarticlegt ltdivgt
532 Truyền dữ liệu cho PartialView Sử dụng ViewData
await HtmlPartialAsync(PartialName customViewData)
Sử dụng Model
await HtmlPartialAsync(PartialName viewModel)
54 Phacircn vugraveng ứng dụng (Areas) Khi ứng dụng web của bạn coacute nhiều module chức năng taacutech biệt thigrave necircn phacircn chia thagravenh nhiều
vugraveng khaacutec nhau Lagravem như vậy sẽ tiện cho việc phaacutet triển cũng như bảo mật riecircng cho từng phacircn
vugraveng
Trong một website thường coacute 2 vugraveng một dagravenh cho khaacutech web vagrave phần cograven lại dagravenh cho người
quản trị Cocircng việc của khaacutech web lagrave tigravem kiểm tra cứu vagrave đặt mua trong khi người quản trị lagrave
quản lyacute CSDL baacuteo caacuteo thống kecirc vagrave phacircn quyền sử dụng
541 Tạo phacircn vugraveng Trong bagravei nagravey bạn được biết kỹ thuật phacircn vugraveng trong MVC vagrave cấu higravenh namespace để traacutenh
xung đột về tecircn của caacutec action giữa caacutec vugraveng
Chuột phải trecircn project chọn Add chọn Areahellip
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 142 Version 11 ndash 032019
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 143
Sau khi nhấp nuacutet Add bạn sẽ thấy một phacircn
vugraveng coacute tecircn Admin được sinh ra
Trong mỗi phacircn vugraveng coacute cấu truacutec như dự aacuten
chiacutenh tức cũng bao gồm caacutec thư mục để caacutec
caacutec thagravenh phần MVC
542 Định tuyến Nếu bạn tạo thecircm một controller coacute tecircn HomeController becircn trong phacircn vugraveng Admin vagrave thecircm
action Index() tương ứng thigrave khi chạy httphostpost sẽ nhận được trang thocircng baacuteo lỗi
Lyacute do lagrave xung đột về tecircn MVC tigravem thấy coacute 2 HomeController becircn trong hệ thocircng necircn khocircng biết
chọn action của Home nagraveo để chạy
Để sửa lỗi nagravey bạn mở file StartUpcs vagrave bổ sung thecircm thuộc tiacutenh Area cho controller
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 144 Version 11 ndash 032019
vagrave thecircm định tuyến trong file StartUpcs
Luacutec đoacute caacutec đường dẫn sẽ map với caacutec controller khaacutec nhau
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 145
CHIA SẺ DỮ LIỆU
61 Dẫn nhập Khi MVC nhập một yecircu cầu HTTP noacute sẽ xaacutec định controller vagrave action tương ứng để thực hiện
(dựa vagraveo phần định nghĩa Route)
Viacute dụ httplocalhost1234ProductEdit2
Theo cuacute phaacutep định tuyến sẽ gọi tới controller Product action Edit vagrave tham số id lagrave 2
public IActionResult Edit(int id)
Chuacute yacute Đường dẫn URL khocircng phacircn biệt chữ hoa hay chữ thường
Ba caacutech cơ bản để aacutenh xạ HTTP request đền action
bull Form values Sử dụng caacutec giaacute trị phần tử trong form gửi lecircn bằng phương thức POST
kể cả caacutec yecircu cầu gửi lecircn bằng jQuery POST
bull Route values Tập hợp caacutec giaacute trị tham số được định tuyến
bull Query strings Thocircng qua chuỗi truy vấn trecircn URL
Lưu yacute Form values route data vagrave query strings đều được lưu trữ dạng cặp name-value
Chia sẻ dữ liệu lagrave gigrave
Trong website coacute rất nhiều thagravenh phần khaacutec nhau Caacutec thagravenh phần nagravey được truy cập hoặc
được gọi vagraveo một thời điểm nagraveo đoacute Vấn đề đặt ra lagrave lagravem sao để tạo một đối tượng dữ liệu ở
thagravenh phần nagravey sau đoacute được sử dụng ở một thagravenh phần khaacutec tại cugraveng hoặc khaacutec thời điểm tạo
Higravenh 6-1 Chia sẽ dữ liệu
Trong MVC dữ liệu được chia sẽ giữa caacutec thagravenh phần theo một số caacutech sau
Sau khi học xong bagravei nagravey học viecircn coacute khả năng
minus Trigravenh bagravey vagrave sử dụng được caacutec đối tượng Server Session vagrave Application
minus Trigravenh bagravey vagrave sử dụng được caacutec phương phaacutep truyền tham số trong ASPNET GET
POST vagrave Cross-Page
minus Mocirc tả được caacutech sử dụng CookieSession để lưu thocircng tin
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 146 Version 11 ndash 032019
Truyền dữ liệu từ controller cho view thocircng qua ViewBag vagrave Model
Chia sẽ dữ liệu theo phiecircn lagravem việc thocircng qua session
Chia sẽ dữ liệu trecircn toagraven ứng dụng thocircng qua Application
Chia sẻ dữ liệu trecircn cugraveng một maacutey khaacutec thocircng qua cookie
62 Truyền từ Controller qua View
621 Sử dụng ViewBag vagrave ViewData ViewData vagrave ViewBag trong ASPNET Core lagrave những tập hợp dữ liệu dạng weak types (hay
cograven gọi lagrave loose types) tức lagrave chuacuteng ta khocircng cần định nghĩa trước kiểu dữ liệu một caacutech rotilde
ragraveng Một số trường hợp sử dụng ViewBag vagrave ViewData
Truyền dữ liệu Viacute dụ
Controller vagrave View Truyền dữ liệu vagraveo một Dropdown List (Select box)
View vagrave Layout View Thiết lập lại nội dung của element lttitlegt trong Layout View từ một View con
PartialView vagrave View Một Widget hiển thị dữ liệu phụ thuộc vagraveo trang magrave người dugraveng truy cập
Vigrave lagrave weak types necircn ViewBag vagrave ViewData chỉ được xử lyacute luacutec runtime vagrave sẽ khocircng coacute kiểm
tra kiểu dữ liệu luacutec compile-time như viewmodel necircn sẽ dễ bị lỗi hơn Do đoacute chuacuteng ta chỉ necircn
sử dụng chuacuteng khi cần truyền một lượng dữ liệu nhỏ vagrave dễ kiểm soaacutet
Chuacute yacute lagrave ViewBag khocircng sử dụng được trong Razor Pages
6211 ViewData
Lagrave một ViewDataDictionary object (cagravei đặt cho interface IDictionaryltstring objectgt)
được truy xuất qua một string key (cho pheacutep coacute khoảng trắng) Với kiểu dữ liệu dạng string thigrave
chuacuteng ta coacute thể lưu trữ vagrave sử dụng trực tiếp cograven với kiểu dữ liệu dạng object thigrave khi sử
dụng chuacuteng ta sẽ phải eacutep kiểu (cast) sang kiểu dữ liệu xaacutec định
Viacute dụ khi truyền một object từ Controller sang View
Tạo model view Customer
public class Customer public int CustomerID get set public string Name get set public string Address get set public Customer() CustomerID = 1 Name = Nhất Nghệ Address = 105 Bagrave Huyện Thanh Quan Quận 3
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 147
Tạo action SomeAction() trong controller Home public IActionResult SomeAction() Lưu dữ liệu kiểu string ViewData[Greeting] = Hello Lưu dữ liệu kiểu object ViewData[KhachHang] = new KhachHang() return View()
Sử dụng ViewData becircn View
Customer khocircng phải lagrave 1 string necircn sẽ cần eacutep kiểu var customer = ViewData[KhachHang] as Customer ltpgtId customerCustomerIDltpgt ltpgtName customerName ltpgt ltpgtName customerAddress ltpgt
6212 ViewBag
Lagrave một DynamicViewData object noacute lagrave một lớp bao bọc (wrap) ViewData để cho pheacutep truy cập
vagraveo object một caacutech linh hoạt ViewBag cũng cho pheacutep chuacuteng ta sử dụng dynamic
properties (dugraveng dấu chấm thay vigrave ngoặc vuocircng như ViewData) Sử dụng ViewBag cũng tương
tự như ViewData nhưng sẽ tiện lợi hơn vigrave noacute khocircng cần phải eacutep kiểu
Viacute dụ 1 public IActionResult AnotherAction() Lưu dữ liệu kiểu string ViewBagGreeting = Hello Lưu dữ liệu kiểu object ViewBagKhachHang = new Customer() return View()
Sử dụng ViewBag becircn View
ViewBagGreeting World ltpgtId ViewBagKhachHangCustomerIDltpgt ltpgtName ViewBagKhachHangName ltpgt ltpgtName ViewBagKhachHangAddress ltpgt
Viacute dụ 2 Truyền đối tượng
ViewBagfilm = new FilmName = Transformer Year = 2017
Thigrave becircn view lấy ra như sau ViewBagfileName
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 148 Version 11 ndash 032019
6213 Sử dụng TempData
Tương tự ViewData vagrave ViewBag TempData cũng dugraveng để truyền dữ liệu ra view Tuy nhiecircn sẽ
hơi khaacutec một chuacutet đoacute lagrave TempData sẽ tồn tại cho đến khi noacute được đọc Tức
lagrave ViewBag vagrave ViewData chỉ hiển thị được dữ liệu ngay tại trang người dugraveng truy cập
cograven TempData coacute thể lưu lại vagrave hiển thị ở một trang sau đoacute vagrave noacute chỉ biến mất khi người dugraveng
đatilde đọc noacute
TempData thường được ứng dụng để hiển thị caacutec thocircng baacuteo thagravenh cocircng thất bại ở trang kế
tiếp
Viacute dụ với ứng dụng Quản lyacute Book coacute 2 trang Danh saacutech Book vagrave Tạo mới Book
Khi người dugraveng Tạo mới Book xong sẽ được chuyển qua trang Danh saacutech Book kegravem một thocircng
baacuteo tạo book thagravenh cocircng Luacutec nagravey chuacuteng ta sẽ khocircng thể dugraveng ViewBag hay ViewData để lưu
thocircng baacuteo được vigrave thocircng baacuteo nằm ở trang khaacutec (Action khaacutec) Chuacuteng ta sẽ dugraveng TempData để
lưu thocircng baacuteo ở trang Tạo mới Book vagrave hiển thị ra ở trang Quản lyacute Book namespace CodeFirstDBControllers public class BookController Controller Trang Danh saacutech Book public IActionResult Index() Logic hiển thị Book Render View return View() Trang Tạo mới Book public IActionResult Create() Logic tạo mới Book Lưu message vagraveo TempData TempData[StatusMessage] = Create book successfully Điều hướng sang trang Danh saacutech Book return RedirectToAction(nameof(Index))
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 149
Ngoagravei View của trang Danh saacutech Book chỉ việc hiển thị message
TempData[StatusMessage]
Một caacutech khaacutec đoacute lagrave tạo một thuộc tiacutenh cho Controller vagrave gaacuten cho noacute Attribute TempData sau
đoacute sử dụng thuộc tiacutenh đoacute để lưu message
public class BookController Controller [TempData] public string StatusMessage get set
TempData Provider
Coacute 2 loại TempData Provider lagrave cookie-based (lưu dữ liệu trong Cookie) vagrave session-
base (lưu dữ liệu trong Session) Việc chọn loại Provider nagraveo lagrave tugravey mục điacutech sử dụng
bull Trong ứng dụng coacute cần dugraveng đến Session state hay khocircng nếu khocircng thigrave necircn dugraveng cookie-based provider
bull Nếu dữ liệu lưu trong TempData lớn thigrave necircn dugraveng session-based provider vigrave Cookie coacute thể bị hạn chế dung lượng bởi trigravenh duyệt vagrave sẽ lagravem tăng thecircm chi phiacute request (cost) Mặc định ASPNET Core 2 sử dụng cookie-base provider để chuyển qua dugraveng session-base
provider thigrave ta sẽ phải cấu higravenh trong file Startupcs public void ConfigureServices(IServiceCollection services) servicesAddMvc()AddSessionStateTempDataProvider() servicesAddMvc()
public void Configure(IApplicationBuilder app IHostingEnvironment env) appUseStaticFiles() appUseSession() appUseMvc(routes =gt routesMapRoute( name default template controller=Homeaction=Indexid) )
622 Sử dụng model Trong controller bạn coacute thể truyền dữ liệu cho view thocircng qua return View(model) hay return
PartialView(model) Trong đoacute đối tượng model lagrave một object với kiểu bất kz Sau đoacute trong view
bạn coacute thể khai thaacutec thocircng tin của đối tượng nagravey thocircng qua đối tượng Model
Nếu trong controller bạn coacute đoạn matilde
var model = new StudentInfoId=rdquoSV001rdquo Name=rdquoTuấnrdquo
return View(model)
Thigrave trong view bạn coacute thể truy xuất thocircng tin sinh viecircn thocircng qua đối tượng Model như sau
Id ModelId
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 150 Version 11 ndash 032019
Name ModelName
Viacute dụ sử dụng model để truyền thocircng tin sinh viecircn từ controller sang view Đối tượng được sử
dụng để chuyển thocircng tin cho Model của View lagrave StudentInfo
Model StudentInfocs
Lớp nagravey gồm 3 thuộc tiacutenh Id Name vagrave Marks Matilde nguồn như sau
public class StudentInfo public string Id get set public string Name get set public double Marks get set
Controller StudentControllercs
Một đối tượng student được tạo ra vagrave chuyển cho view thocircng qua lệnh return View(model)
public class StudentController Controller hellip public ActionResult Detail() Tạo đối tượng var model = new StudentInfo Id = SV001 Name = Nguyễn Ngọc Hacircn Marks = 95 Truyền đối tượng model cho view return View(model) return View(model)
View Detailcshtml
Sử dụng Model để truy xuất thocircng tin chia sẻ của controller Model chiacutenh lagrave đối tượng được
truyền từ controller thocircng qua lệnh return View(model)
ViewBagTitle = Student Detail lth2gtStudent Detaillth2gt ltulgt ltligtId ModelIdltligt ltligtName ModelNameltligt ltligtMarks ModelMarksltligt ltulgt
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 151
Kết quả
63 Session Chia sẻ dữ liệu theo phiecircn lagrave kỹ thuật chia sẽ dữ liệu cơ bản của ứng dụng cocircng nghệ web Theo
đoacute dữ liệu được lưu trữ trong đối tượng Session sẽ được dugraveng chung cho caacutec thagravenh phần
(controller view action filterhellip) lagravem việc trong cugraveng một phiecircn lagravem việc
Về mặc bản chất thigrave Session được server cấp phaacutet riecircng cho từng user để lưu dữ liệu của riecircng
migravenh Vugraveng nhớ đặc biệt nagravey chỉ tồn tại trong phiecircn lagravem việc Kết thuacutec phiecircn thigrave vugraveng nhớ nagravey
được giải phoacuteng Vigrave tiacutenh chất nagravey necircn với caacutec website coacute số khaacutech truy cập đồng thời đocircng vagrave sử
dụng session để duy trigrave dữ liệu lơn thigrave rất coacute thể dẫn đến thiếu bộ nhớ vagrave website sẽ hoạt động
khocircng hiệu quả
Higravenh 6-2 Session chia sẻ dữ liệu riecircng của từng phiecircn lagravem việc
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 152 Version 11 ndash 032019
631 Cagravei đặt amp Cấu higravenh Mở cửa sổ ldquoManage NuGet Packageshelliprdquo để tiến hagravenh cagravei thư viện ldquoMicrosoftAspNetCoreSessionrdquo
Cấu higravenh thời gian hết hạn Session trong class StartUp bằng caacutech thecircm vagraveo hagravem
ConfigureServices () đoạn code sau
public void ConfigureServices(IServiceCollection services) servicesAddDistributedMemoryCache() servicesAddSession(options =gt You can set Time optionsIdleTimeout = TimeSpanFromMinutes(1) ) servicesAddMvc()
vagrave bổ sung lệnh appUseSession() vagraveo hagravem Configure() trong lớp StartUp
632 Sử dụng Session Khai baacuteo biến Session ở controller
Requires using MicrosoftAspNetCoreHttp HttpContextSessionSetString(SessionKeyName HIENLTH) HttpContextSessionSetInt32(SessionKeyYearsMember 3)
Ở Razor view lấy giaacute trị Session
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 153
using MicrosoftAspNetCoreHttp Session Value = ContextSessionGetString(_Name)
Viacute dụ trecircn Controller Home
public class HomeController Controller const string SessionKeyName = _Name const string SessionKeyYearsMember = _YearsMember const string SessionKeyDate = _Date public IActionResult Index() Requires using MicrosoftAspNetCoreHttp HttpContextSessionSetString(SessionKeyName HIENLTH) HttpContextSessionSetInt32(SessionKeyYearsMember 3) return RedirectToAction(SessionNameYears) public IActionResult SessionNameYears() var name = HttpContextSessionGetString(SessionKeyName) var yearsMember = HttpContextSessionGetInt32(SessionKeyYearsMember) return Content($Name name Membership years yearsMember)
Kết quả chạy
Để đơn giản việc code coacute thể khai baacuteo biến _session kiểu HttpContextSession
public class SomeOtherClass
private readonly IHttpContextAccessor _httpContextAccessor
private ISession _session =gt
_httpContextAccessorHttpContextSession
public SomeOtherClass(IHttpContextAccessor httpContextAccessor)
_httpContextAccessor = httpContextAccessor
public void TestSet()
_sessionSetString(Test Ben Rules)
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 154 Version 11 ndash 032019
public void TestGet()
var message = _sessionGetString(Test)
Lưu trữ đối tượng phức
Sử dụng JSON SerializeObject() để lưu vagrave lấy lại giaacute trị bằng JSON DeSerializeObject()
public static class SessionExtensions
public static void SetltTgt(this ISession session string key T value)
sessionSetString(key JsonConvertSerializeObject(value))
public static T GetltTgt(this ISession session string key)
var value = sessionGetString(key)
return value == null default(T)
JsonConvertDeserializeObjectltTgt(value)
Sử dụng
var myComplexObject = new MyClass()
HttpContextSessionSetltMyClassgt (Test myComplexObject)
hoặc
var myComplexObject = HttpContextSessionGetltMyClassgt(Test)
Viacute dụ
public IActionResult SetDate() Requires you add the Set extension method mentioned in the article HttpContextSessionSetltDateTimegt(SessionKeyDate DateTimeNow) return RedirectToAction(GetDate) public IActionResult GetDate() Requires you add the Get extension method mentioned in the article var date = HttpContextSessionGetltDateTimegt(SessionKeyDate) var sessionTime = dateTimeOfDayToString() var currentTime = DateTimeNowTimeOfDayToString() return Content($Current time currentTime -
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 155
+ $session time sessionTime)
633 Viacute dụ aacutep dụng Với tiacutenh chất của session như vậy cho pheacutep duy trigrave thocircng tin riecircng tư của từng phiecircn khaacutec
nhau Cụ thể lagrave
bull Duy trigrave giỏ hagraveng
bull Duy trigrave thocircng tin người dugraveng
bull Duy trigrave thocircng tin về giao diện tugravey biến cho từng phiecircnhellip
Viacute dụ sau đacircy giuacutep bạn hiểu hơn về sử dụng session để chia sẽ thocircng tin giữa caacutec thagravenh phần
trong cugraveng phiecircn lagravem việc
MOcirc TẢ
bull Vagraveo trang đăng kyacute nhập thocircng tin sinh viecircn vagrave nhấp nuacutet [Lưu] thigrave thocircng tin của sinh
viecircn được lưu lại trong Session
bull Vagraveo trang tagravei khoản để xem lại thocircng tin đatilde đăng kyacute trước đoacute được lấy từ Session Nếu
trong session chưa coacute thocircng tin (nghĩa lagrave chưa đăng kyacute) thigrave khi vagraveo trang nagravey sẽ tự
động chuyển về trang đăng kyacute
bull Nhấp vagraveo liecircn kết Log Off để xoacutea user khỏi Session vagrave trở về trang đăng kyacute
THỰC HIỆN
Để hoagraven thagravenh viacute dụ trecircn bạn cần phải thực hiện caacutec bước
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 156 Version 11 ndash 032019
Bước 1 Tạo lớp model UserInfo dugraveng để tiếp nhận thocircng tin form vagrave duy trigrave trong session
Bước 2 Tạo controller AccountController gồm 3 action
bull GET AccountRegister hiển thị giao diện đăng kyacute
bull POST AccountRegister tiếp nhận thocircng tin user vagrave lưu vagraveo session
bull GET AccountProfile hiển thị thocircng tin tagravei khoản đatilde đăng kyacute Nếu khocircng tồn tại trong
session (chưa đăng k) thigrave chuyển về GET AccountRegister
bull GET AccountLogOff xoacutea session user vagrave trở về trang đăng kyacute
Bước 3 Tạo view cho action Register vagrave Profile
Bước 1 Tạo lớp model UserInfo dugraveng để tiếp nhận thocircng tin form vagrave duy trigrave trong
session
public class UserInfo public string UserName get set public string Password get set public string FullName get set public string Email get set
Bước 2 Tạo controller AccountController gồm 3 action
public class AccountController Controller private readonly IHttpContextAccessor _httpContextAccessor private ISession _session =gt _httpContextAccessorHttpContextSession public AccountController(IHttpContextAccessor httpContextAccessor) _httpContextAccessor = httpContextAccessor GET AccountRegister public ActionResult Register() return View() POST AccountRegister [HttpPost] public ActionResult Register(UserInfo model) Lưu thocircng tin user vagraveo session _sessionSetltUserInfogt(user model) chuyển trang xem thocircng tin Session return RedirectToAction(Profile Account) GET AccountProfile public ActionResult Profile() Chuyển về trang đăng kyacute nếu user chưa coacute trong session if (_sessionGetltUserInfogt(user) == null) return RedirectToAction(Register Account) return View(_sessionGetltUserInfogt(user))
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 157
GET AccountLogOff public ActionResult LogOff() _sessionRemove(user) return RedirectToAction(Register Account)
Bước 3 Tạo view cho action Register() vagrave Profile()
Registercshtml
ViewData[Title] = Register Layout = ~ViewsShared_Layoutcshtml lth2gtRegisterlth2gt ltform asp-action=Register asp-controller=Account method=postgt ltdivgtUser Nameltdivgt ltinput name=UserName class=form-control gt ltdivgtPasswordltdivgt ltinput name=Password type=password class=form-control gt ltdivgtFull Nameltdivgt ltinput name=FullName class=form-control gt ltdivgtEmailltdivgt ltinput name=Email class=form-control gt ltbr gt ltinput type=submit value=Register class=btn btn-default gt ltformgt
Profilecshtml ViewData[Title] = Profile Layout = ~ViewsShared_Layoutcshtml lth2gtProfilelth2gt lt--Hiển thị thocircng tin user--gt ltulgt ltligtUser Name ModelUserNameltligt ltligtPassword ModelPasswordltligt ltligtFull Name ModelFullNameltligt ltligtEmail ModelEmailltligt ltulgt lt--Liecircn kết đăng xuất--gt lta asp-controller=Account asp-action=LoggOffgtLog Offltagt
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 158 Version 11 ndash 032019
Razor amp Helper
71 Razor
711 Giới thiệu Razor lagrave 1 ngocircn ngữ ngắn gọn rỏ ragraveng vagrave hữu iacutech magrave noacute cho pheacutep bạn tạo ra caacutec giao diện cho
ứng dụng ASPNET MVC trong khi vẫn giữ được sự phacircn chia rỏ ragraveng khả năng coacute thể kiểm tra
vagrave sự phaacutet triển dựa trecircn mocirc higravenh lập trigravenh Caacutec lập trigravenh viecircn ASPNET MVC đang tigravem kiếm cho
migravenh 1 ngocircn ngữ coacute cuacute phaacutep rỏ ragraveng ngắn gọn vagrave bacircy giờ noacute đatilde được xacircy dựng sẵn với ngocircn
ngữ quen thuộc lagrave C
Trong Razor bạn cần hiểu rotilde caacutec khaacutei niệm vagrave qui ước sau
Khối matilde razor được đặt trong
Biểu thức nội tuyến (caacutec biến vagrave chức năng) bắt đầu với
Matilde lệnh kết thuacutec bằng dấu chấm phẩy
Biến được khai baacuteo với từ khoacutea var
Chuỗi được đoacuteng mở bằng dấu nhaacutey keacutep
Matilde C phacircn biệt hoa thường
File C coacute phần mở rộng cshtml
Sau đacircy lagrave viacute dụ viết matilde với Razor
lt-- Khối lệnh đơn --gt var message = Hello World lt-- Biểu thức nội tuyến --gt ltpgtGiaacute trị của message lagrave messageltpgt lt-- Khối nhiều dograveng matilde lệnh --gt var greeting = Welcome to our site var weekDay = DateTimeNowDayOfWeek var greetingMessage = greeting + Today is + weekDay ltpgtLời chagraveo lagrave greetingMessageltpgt
712 Lagravem thế nagraveo noacute lagravem việc Razor lagrave một cuacute phaacutep lập trigravenh đơn giản cho việc nhuacuteng matilde chạy phiacutea maacutey chủ trong caacutec trang
web Cuacute phaacutep Razor được dựa trecircn cuacute phaacutep ASP nhưng được thiết kế đặc biệt để tạo caacutec ứng
dụng web thuận tiện hơn
Cuacute phaacutep Razor cung cấp cho bạn tất cả sức mạnh của ASP nhưng dễ học hơn đối với người mới
vagraveo nghề vagrave lagravem hiệu quả hơn đối với caacutec chuyecircn gia
Caacutec trang web như Razor coacute thể được mocirc tả như caacutec trang HTML với hai loại nội dung nội dung
HTML vagrave matilde Razor
Khi maacutey chủ lần đọc trang web noacute chạy matilde Razor trước khi gửi trang HTML cho trigravenh duyệt Caacutec
matilde được thực thi trecircn maacutey chủ coacute thể thực hiện nhiệm vụ magrave khocircng thể được thực hiện trong
trigravenh duyệt viacute dụ như truy cập vagraveo một cơ sở dữ liệu maacutey chủ Matilde maacutey chủ coacute thể tạo ra nội
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 159
dung HTML động trước khi noacute được gửi đến trigravenh duyệt Phiacutea trigravenh duyệt nếu bạn xem matilde nguồn
thigrave chỉ thấy HTML giống như trang web tĩnh magrave khocircng thấy matilde Razor vigrave đatilde được thự thi trecircn
server
Caacutec trang web với cuacute phaacutep Razor viết bằng C coacute phần mở rộng cshtml viết bằng VB sẽ coacute
phần mở rộng lagrave vbhtml
713 Lagravem việc với caacutec đối tượng Viết matilde phiacutea server thường liecircn quan đến caacutec đối tượng DateTime lagrave đối tượng điển higravenh được
xacircy dựng trong C đối tượng (bạn cũng coacute thể xacircy dựng đối tượng riecircng của migravenh) Bạn coacute thể
gọi caacutec phương thức hoặc sử dụng caacutec thuộc tiacutenh của đối tượng đoacute
Sau đacircy lagrave vi dụ truy xuất caacutec thuộc tiacutenh của đối tượng DateTime
lttable border=1gt lttrgt ltth width=100pxgtNameltthgt lttd width=100pxgtValuelttdgt lttrgt lttrgt lttdgtDaylttdgt lttdgtDateTimeNowDaylttdgt lttrgt lttrgt lttdgtHourlttdgt lttdgtDateTimeNowHourlttdgt lttrgt lttrgt lttdgtMinutelttdgt lttdgtDateTimeNowMinutelttdgt lttrgt lttrgt lttdgtSecondlttdgt lttdgtDateTimeNowSecondlttdgt lttrgt lttablegt
714 Cacircu lệnh điều khiển Bạn coacute thể viết cacircu lệnh rẽ nhaacutenh if ifhellipelse hay ifhellipelse ifhellipelse switchhellipcase lặp (while for
do foreach)hellip trong khối matilde như trong C
Viacute dụ 1
var txt = if (DateTimeNowHour gt 12) txt = Good Evening else txt = Good Morning
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 160 Version 11 ndash 032019
lthtmlgt ltbodygt ltpgtThe message is txtltpgt ltbodygt
Viacute dụ 2
var weekday = DateTimeNowDayOfWeek var day = weekdayToString() var message = lthtmlgt ltbodygt switch (day) case Monday message = This is the first weekday break case Thursday message = Only one day before weekend break case Friday message = Tomorrow is weekend break default message = Today is + day break ltpgtmessageltpgt ltbodygt lthtmlgt
Viacute dụ 3
string[] members = Jani Hege Kai Jim int i = ArrayIndexOf(members Kai) + 1 int len = membersLength string x = members[2 - 1] lthtmlgt ltbodygt lth3gtMemberslth3gt foreach (var person in members) ltpgtpersonltpgt ltpgtThe number of names in Members are lenltpgt ltpgtThe person at position 2 is xltpgt ltpgtKai is now in position iltpgt ltbodygt
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 161
lthtmlgt
715 Bảng tham khảo lệnh Razor Khaacutei niệm Matilde Razor
Khối matilde int x = 123 string y = because
Biểu thức (đatilde matilde hoacutea HTML) ltspangtmodelMessageltspangt
Biểu thức (chưa matilde hoacutea HTML) ltspangt HtmlRaw(modelMessage) ltspangt
Kết hợp text vagrave HTML foreach (var item in items) ltspangtitemPropltspangt
Trộn code vagrave text
if (foo) lttextgtPlain Textlttextgt if (foo) Plain Text is bar
Khối using using (HtmlBeginForm()) ltinput type=text value=input heregt
Địa chỉ email Hi philhaexamplecom
Biểu thức (tường minh) ltspangtISBN(isbnNumber)ltspangt
Matilde hoacutea kyacute hiệu ltspangt In Razor you use the foo to display the value of foo ltspangt
Chuacute thiacutech phiacutea server This is a server side multiline comment
Trộn biểu thức vagrave text Hello title name
72 Tag Helper Một trong những tiacutenh năng mới của ASPNET Core lagrave Tag Helper Tag Helper cho pheacutep người lập
trigravenh viết matilde trecircn server-side sau đoacute render thẻ HTML chuẩn trong Razor file nhằm mang lại trải
nghiệm người dugraveng
Một số điểm nổi bật của Tag Helper
Lagravem sao cho giống thẻ HTML nhất
Hỗ trợ IntelliSense phong phuacute
Viết matilde mạnh mẽ tin cậy vagrave dễ bảo trigrave
Khai baacuteo sử dụng Tag Helper trong file _ViewsImportscshtml
addTagHelper MicrosoftAspNetCoreMvcTagHelpers
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 162 Version 11 ndash 032019
721 Anchor Tag Helper Sử dụng
HtmlActionLink(Register Register Account) lta href=UrlAction(Register Account)gtRegisterltagt
Đều cho kết quả như nhau
lta href=AccountRegistergtRegisterltagt
Sử dụng anchor tag helper ta coacute thể viết dạng thuộc tiacutenh bắt đầu bởi asp-hellip ngay trong thẻ
HTML
lta asp-controller=Account asp-action=RegistergtRegisterltagt
Danh saacutech caacutec thuộc tiacutenh
Thuộc tiacutenh Mocirc tả
asp-action Tecircn action của Controller
asp-area Tecircn của MVC Area
asp-controller Tecircn của MVC Controller
asp-host Tecircn domain
asp-protocol Giao thức http https ftp hellip
asp-all-route-data Truyền dictionary route data
var d = new Dictionaryltstring stringgt key1 value1 key2 value2 lta asp-all-route-data=dgtClickltagt Kết quả
lta href=Pagekey1=value1ampampkey2=value2gtClickltagt
asp-fragment VD
lta asp-fragment=notesgtClickltagt
tương đương với lta href=PagenotesgtClickltagt
asp-page lta asp-page=pagegtClickltagt
tương đương với
lta href=PagegtClickltagt
asp-route Tecircn của route
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 163
Ngoagravei ra ta cograven thecircm thocircng số định tuyến bằng caacutech sử dụng thuộc tiacutenh asp-route-hellip Viacute dụ
lta asp-controller=Product asp-action=Display asp-route-id=ViewBagProductIdgt
View Details ltagt
Ngoagravei ra để coacute thể xuất hiện HTML như sau
lta href=httpsaspecificdomaincomAccountRegisterfragmentgtRegisterltagt
Trước đacircy nếu sử dụng HTML helper ta sẽ viết
HtmlActionLink(Register Register Account https aspecificdomaincom fragment null null)
Nhưng sử dụng tag helper coacute thể route như sau
lta asp-controller=Account asp-action=Register asp-protocol=https asp-host=asepecificdomaincom asp-fragment=fragmentgtRegisterltagt
722 Caacutec Model Helper Giả sử đatilde coacute Model
public class Movie public int ID get set public string Title get set public DateTime ReleaseDate get set public string Genre get set public decimal Price get set
Thigrave phần viết matilde ở view cho phần nhập liệu Model
ltlabel asp-for=MovieTitlegtltlabelgt
Sẽ cho matilde HTML tương ứng
ltlabel for=Movie_TitlegtTitleltlabelgt
Viacute dụ dagravenh cho ocirc nhập password
723 Form Tag Helper Khởi tạo form với khai baacuteo action vagrave route
ltform asp-controller=Demo asp-action=Register method=postgt lt-- Input and Submit elements --gt ltformgt
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 164 Version 11 ndash 032019
Bổ sung thuộc tiacutenh chỉ định return Url asp-route-returnurl=ViewData[ReturnUrl]
Input Tag Helper
Cuacute phaacutep ltinput asp-for=ltExpression Namegt gt
Input tag Helper sẽ sinh ra Id Name tương ứng với giaacute trị trong asp-for
Tự động sinh kiểu type phụ thuộc vagraveo data annotation của thuộc tiacutenh trong model
khocircng ghi đegrave nếu coacute chỉ định trước
Bảng mapping thuộc tiacutenh giữa kiểu dữ liệu C với loại thẻ input
NET type Input Type
Bool type=rdquocheckboxrdquo
String type=rdquotextrdquo
DateTime type=rdquodatetimerdquo
Byte type=rdquonumberrdquo
Int type=rdquonumberrdquo
Single Double type=rdquonumberrdquo
Bảng mapping giữa annotation với thẻ input
Attribute Input Type
[EmailAddress] type=rdquoemailrdquo
[Url] type=rdquourlrdquo
[HiddenInput] type=rdquohiddenrdquo
[Phone] type=rdquotelrdquo
[DataType(DataTypePassword)] type=rdquopasswordrdquo
[DataType(DataTypeDate)] type=rdquodaterdquo
[DataType(DataTypeTime)] type=rdquotimerdquo
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 165
724 Tag Helper tugravey biến Chuacuteng ta coacute thể tugravey chọn Tag Helper cho mục điacutech riecircng của migravenh bằng caacutech xacircy dựng lớp con
kế thừa lớp TagHelper sau đoacute chỉ định caacutec thuộc tiacutenh tag vagrave quan trọng nhất lagrave override phương
thức Process()
Xacircy dựng caacutec Model cần dugraveng
public class EmployeesViewModel public ListltEmployeegt Employees get set public class Employee public string Name get set public string JobTitle get set public string Profile get set public ListltFriendgt Friends get set public class Friend public string Name get set
Xacircy dựng action Employees() để hiển thị EmployeeViewModel
public IActionResult Employees() var model = new EmployeesViewModel Employees = new ListltEmployeegt new Employee Name = Hien Luong JobTitle = Software Developer Profile = CASPNET Developer Friends = new ListltFriendgt new Friend Name = Nhat new Friend Name = Bao new Friend Name = Khanh new Employee Name = Nhat Ngo JobTitle = MI6 Agent Profile = Has licence to kill Friends = new ListltFriendgt new Friend Name = James Gordon new Friend Name = Robin Hood
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 166 Version 11 ndash 032019
return View(model)
Xacircy dựng view Employeescshtml để hiển thị như higravenh dưới
model FirstWebAppModelsEmployeesViewModel ViewData[Title] = Employees Layout = ~ViewsShared_Layoutcshtml lth2gtEmployeeslth2gt foreach (var employee in ModelEmployees) ltdetailsgt ltsummarygtemployeeNameltsummarygt ltemgtemployeeJobTitleltemgt ltpgtemployeeProfileltpgt ltulgt foreach (var friend in employeeFriends) ltligtfriendNameltligt ltulgt ltdetailsgt
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 167
Định nghĩa thẻ employee cho pheacutep custom caacutec thuộc tiacutenh bằng caacutech xacircy dựng lớp
EmployeeTagHelper kế thừ từ TagHelper
[HtmlTargetElement(employee)] public class EmployeeTagHelper TagHelper [HtmlAttributeName(summary)] public string Summary get set [HtmlAttributeName(job-title)] public string JobTitle get set [HtmlAttributeName(profile)] public string Profile get set public override void Process( TagHelperContext context TagHelperOutput output) outputTagName = details outputTagMode = TagModeStartTagAndEndTag var sb = new StringBuilder() sbAppendFormat(ltsummarygt0ltsummarygt thisSummary) sbAppendFormat(ltemgt0ltemgt thisJobTitle) sbAppendFormat(ltpgt0ltpgt thisProfile) sbAppendFormat(ltulgt) outputPreContentSetHtmlContent(sbToString()) outputPostContentSetHtmlContent(ltulgt)
Bổ sung view Employeeschtml
foreach (var employee in ModelEmployees) ltemployee summary=employeeName job-title=employeeJobTitle profile=employeeProfilegt foreach (var friend in employeeFriends) ltfriend name=friendName gt ltemployeegt
Kết quả chạy output xuống
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 168 Version 11 ndash 032019
Như vậy chuacuteng coacute thể định nghĩa caacutec thuộc tiacutenh cũng như thẻ tugravey chọn cho mỗi đối tượng riecircng
biệt tugravey theo nhu cầu sử dụng
73 HTML Helper Hiện tại trong MVC Core sử dụng Tag Helper thay cho HTML Helper Tuy nhiecircn bạn vẫn coacute thể
sử dụng HTML Helper trong Razor View bigravenh thường
Giống như caacutec control trong ASPNET HTML helper được sử dụng để tugravey chỉnh HTML đầu ra tuy
nhiecircn HTML Helper nhẹ hơn Khocircng giống Web Form control một HTML Helper khocircng coacute sự kiện
vagrave view state
Coacute nhiều HTML Helper cho kết quả trả về lagrave một chuỗi Với MVC bạn coacute thể tạo ra caacutec helper
của migravenh hoặc sử dụng caacutec HTML helper coacute sẵn
731 HTML Links HTMLActionLink() lagrave helper được sử dụng để tạo liecircn kết trong MVC Với MVC
HtmlActionLink() khocircng liecircn kết đến một view magrave lagrave một action
Cuacute phaacutep Razor
HtmlActionLink(linkText actionName controllerName htmlAttributes new attribute = value routeValues new parameter = value )
HtmlActionLink() helper coacute một số thuộc tiacutenh như sau
Thuộc tiacutenh
Mocirc tả
linkText
Văn bản hiển thị (nhatilden)
actionName
Tecircn Action
controllerName
Tecircn controller
routeValues
Giacutea trị gửi đến action (tham số yecircu cầu)
htmlAttributes
Caacutec thuộc tiacutenh của thẻ ltagt
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 169
Với cuacute phaacutep trecircn của HtmlActionLink() sẽ sinh thẻ liecircn kết như sau
lta href=rdquocontrollerNameactionNameparameter=valuerdquo attribute=rdquovaluerdquogtlinkTextltagt
Sau đacircy lagrave một số tigravenh huống thường dugraveng
HtmlActionLink(Text Action) HtmlActionLink(Text Action Controller) HtmlActionLink(Text Action Controller htmlAttributes new title = Hello routeValues new name = Tuan id = SV01 )
Matilde được sinh ra
lta href=CookieActiongtTextltagt lta href=ControllerActiongtTextltagt lta href=ControllerActionSV01name=Tuan title=HellogtTextltagt
Để tạo liecircn kết với ảnh bạn cần nhờ đến helper UrlAction() Khi đoacute liecircn kết sẽ lagrave
732 Caacutec phần tử HTML Form Caacutec HTML Helper dưới đacircy coacute thể được dugraveng để tạo ra form HTML như sau
HTML Helper Thẻ HTML được sinh ra
HtmlBeginForm() ltformgt
HtmlEndForm() ltformgt
HtmlTextArea() lttextareagt
HtmlTextBox() ltinput type=rdquotextrdquogt
HtmlCheckBox() ltinput type=rdquocheckboxrdquogt
HtmlRadioButton() ltinput type=rdquoradiordquogt
HtmlListBox() ltselect multiplegt
HtmlDropDownList() ltselectgt
HtmlHidden() ltinput type=rdquohiddenrdquogt
HtmlPassword() ltinput type=rdquopasswordrdquogt
733 DropdownList vagrave ListBox
Để sinh caacutec phần tử nagravey bạn phải sử dụng HtmlDropdownList() vagrave HtmlListBox() Sau
đacircy lagrave viacute dụ giuacutep bạn hiểu điều nagravey
using SystemCollectionsGeneric ViewData[Title] = MyListHTMLHelper Layout = ~ViewsShared_Layoutcshtml ListltUserInfogt userInfos = new ListltUserInfogt new UserInfo FullName = Hien Luong UserName = hienlth new UserInfo
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 170 Version 11 ndash 032019
FullName = Nhat Ngo UserName = nhatngo ViewBagUserInfos = new SelectList(userInfos UserName FullName) using (HtmlBeginForm()) HtmlLabel(UserInfos Users ) HtmlDropDownList(UserInfos Please select one user) HtmlListBox(UserInfos)
Matilde HTML sinh ra cho caacutec Helper như sau
ltform action=HomeMyListHTMLHelper method=postgt ltlabel for=UserInfosgtUsers ltlabelgt ltselect id=UserInfos name=UserInfosgt
ltoption value=gtPlease select one userltoptiongt ltoption value=hienlthgtHien Luongltoptiongt ltoption value=nhatngogtNhat Ngoltoptiongt
ltselectgt ltformgt ltselect id=UserInfos multiple=multiple name=UserInfosgt
ltoption value=hienlthgtHien Luongltoptiongt ltoption value=nhatngogtNhat Ngoltoptiongt
ltselectgt
734 Custom HTML Helper Bạn coacute quyền tạo ra caacutec HTML Helper riecircng của migravenh bằng caacutech thecircm vagraveo interface
IHtmlHelper
Viacute dụ sai đacircy tocirci định nghĩa method ColorfulHeading() Method nagravey bổ sung cho interface
IHtmlHelper necircn cần phải định nghĩa dạng extension method
Giả sử tạo thư mục Extensions ở thư mục gốc vagrave tạo lớp thecircm method Extension
public static class MyHtmlHelperExtensions public static IHtmlContent ColorfulHeading(this IHtmlHelper htmlHelper int level string color string content)
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 171
level = level lt 1 1 level level = level gt 6 6 level var tagName = $hlevel var tagBuilder = new TagBuilder(tagName) tagBuilderAttributesAdd(style $colorcolor green) tagBuilderInnerHtmlAppend(content stringEmpty) return tagBuilder
Ở view muốn sử dụng Helper phải using class định nghĩa
Code minh họa
using MyLabMVCExtensions HtmlColorfulHeading(1 green Welcome to Nhất Nghệ) HtmlColorfulHeading(2 orange ASPNET Core 20) Kết quả thực nghiệm
Code HTML sinh ra
lth1 style=colorgreengtWelcome to Nhất Nghệlth1gt
lth2 style=colororangegtASPNET Core 20lth2gt
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 172 Version 11 ndash 032019
Kiểm lỗi dữ liệu vagraveo
81 Giới thiệu Kiểm soaacutet tiacutenh hợp lệ của dữ liệu form nhập trước khi chuyển dữ liệu đến server để xử lyacute lagrave nhiệm
vụ cực kz quan trọng Rất nhiều tiecircu chiacute được đặt ra để kiểm duyệt tugravey thuộc vagraveo yecircu cầu cụ thể
của form nhập liệu Dugrave sao vẫn coacute thể liệt kecirc một số tiecircu chiacute kiểm duyệt chung chung như sau
bull Khocircng cho để trống ocirc nhậphellip
bull Dữ liệu nhập vagraveo phải theo một khuocircn dạng nhất định nagraveo đoacute email creditcard urlhellip
bull Dữ liệu phải nhập vagraveo phải đuacuteng kiểu số nguyecircn số thực ngagravey giờhellip
bull Dữ liệu nhập vagraveo phải coacute giaacute trị tối thiểu tối đa trong phạm vihellip
bull Dữ liệu nhập phải đuacuteng theo một kết quả tiacutenh toaacuten riecircng của bạnhellip
Trong MVC việc kiểm lỗi chỉ được viết một nơi nhưng xảy ra cả 2 phiacutea lagrave client vagrave server Vigrave nếu
với caacutech nagraveo đoacute người sử dụng vượt qua phiacutea client thigrave vẫn cograven một chốt chặn ở phiacutea server Ở
phiacutea client MVC sử dụng Jquery validate pluggin cograven phiacutea server lagrave sự kết hợp giữa Model vagrave
Controller
Để đơn giản trong việc học kiểm lỗi bạn sẽ được lagravem quen thocircng qua một viacute dụ đơn giản Từ đoacute
chuacuteng ta sẽ tigravem hiểu sacircu hơn về điều nagravey
82 Mocirc higravenh lập trigravenh kiểm lỗi Để thực hiện kiểm lỗi trong MVC bạn cần thực hiện 3 cocircng việc chiacutenh
bull Bước 1 Khai baacuteo luật kiểm lỗi cho caacutec thuộc tiacutenh của Model
bull Bước 2 Thực hiện kiểm lỗi trong Controller
bull Bước 3 Hiển thị lỗi trong view
Để hiểu rotilde 3 bước nagravey bạn cần thực hiện theo viacute dụ được mocirc tả như ở becircn dưới
Higravenh 8-1 Chạy lần đầu tiecircn
Higravenh 8-2 Nhập tecircn khocircng nhập tuổi
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 173
Higravenh 8-3 Nhập sai tecircn vagrave tuổi
Higravenh 8-4 Nhập đuacuteng
Bước 1 Khai baacuteo luật kiểm lỗi cho caacutec thuộc tiacutenh của Model
Điacutenh kegravem caacutec annotation kiểm lỗi ngay trecircn caacutec thuộc tiacutenh cần kiểm tra trong lớp model Trong
bagravei nagravey cần sử dụng caacutec annotation sau
Annotation Thuộc tiacutenh Mocirc tả
[MinLength] FullName Giới hạn số lượng kyacute tự tối
thiểu lagrave 5 Nếu khocircng nhập
vẫn hợp lệ vigrave khocircng sử dụng
Required
[Required] Age Khocircng để trống
[Range] Age Giới hạn tuổi từ 16 đến 65
Sau đacircy lagrave matilde nguồn của lớp model coacute điacutenh kegravem caacutec annotaton kiểm lỗi
public class EmployeeInfo [MinLength(5 ErrorMessage = Tecircn iacutet nhất 5 kyacute tự )] public String FullName get set [Required(ErrorMessage = Khocircng để trống )] [Range(16 65 ErrorMessage = Tuổi phải từ 16 đến 65 )] public int Age get set
Bước 2 Thực hiện kiểm lỗi trong Controller
Controller sau đacircy gồm 2 action
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 174 Version 11 ndash 032019
bull Index() để hiển thị form
bull Validate() để nhận thocircng tin form bằng model vagrave kiểm lỗi thocircng tin trong model Action
nagravey sẽ kiểm lỗi model của đối số xem coacute hợp lệ hay chưa thocircng qua thuộc tiacutenh
ModelStateIsValid Nếu giaacute trị của thuộc tiacutenh nagravey lagrave true thigrave dữ liệu trong model đatilde
hợp lệ Action nagravey bổ sung dograveng thocircng taacuteo khi dữ liệu trong model hợp lệ bằng caacutech sử
dụng phương thức ModelStateAddModelError(Property Message) Trong đoacute
o Property thuộc tiacutenh phạm lỗi Nếu khocircng chỉ rotilde trecircn thuộc tiacutenh thigrave đacircy lagrave lỗi chung
o Message thocircng baacuteo lỗi
public class ValidatorController Controller public IActionResult Index() return View() public ActionResult Validate(EmployeeInfo model) if (ModelStateIsValid) ModelStateAddModelError( Chuacutec mừng bạn đatilde nhập đuacuteng ) return View(Index)
Bước 3 Hiển thị lỗi trong view
Lỗi được hiển thị trecircn view coacute thể tập trung hoặc riecircng cho từng thuộc tiacutenh của model
bull asp-validation-for=FieldName Hiển thị lỗi riecircng cho từng thuộc tiacutenh trong model
bull asp-validation-summary=ModelOnly Hiển thị lỗi tập trung Nếu giaacute trị thuộc tiacutenh
lagrave ModelOnly thigrave chỉ hiển thị lỗi do model gacircy ra None lagrave khocircng hiển thị vagrave All lagrave tất cả
caacutec lỗi (kể cả lỗi do người dugraveng thecircm vagraveo)
model FirstWebAppModelsEmployeeInfo ViewData[Title] = Kiểm lỗi Layout = ~ViewsShared_Layoutcshtml lth2gtKiểm lỗilth2gt ltdiv class=rowgt ltdiv class=col-md-4gt ltform asp-controller=Validator asp-action=Validate method=postgt ltdiv asp-validation-summary=ModelOnly class=text-dangergtltdivgt ltdiv class=form-groupgt ltlabel asp-for=FullName class=control-labelgtltlabelgt ltinput asp-for=FullName class=form-control gt ltspan asp-validation-for=FullName class=text-dangergtltspangt
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 175
ltdivgt ltdiv class=form-groupgt ltlabel asp-for=Age class=control-labelgtltlabelgt ltinput asp-for=Age class=form-control gt ltspan asp-validation-for=Age class=text-dangergtltspangt ltdivgt ltdiv class=form-groupgt ltinput type=submit value=Kiểm lỗi class=btn btn-default gt ltdivgt ltformgt ltdivgt ltdivgt Với caacutech viết ở trecircn lagrave bạn đatilde coacute thể chạy ứng dụng vagrave lỗi đatilde được kiểm tốt nhưng chỉ xảy ra
phiacutea server nghĩa lagrave khi nhấp nuacutet [Kiểm lỗi] thigrave dữ liệu phải được chuyển đến server để kiểm tra
vagrave thocircng baacuteo lỗi được gửi về để hiển thị Với phương phaacutep nagravey sẽ dẫn đến phản ứng chậm đến
người dugraveng Nếu mạng khocircng tốt người dugraveng phải đợi
Để coacute thể kiểm lỗi ngagravey trước khi chuyển dữ liệu lecircn server thigrave bạn phải nhờ đến phương phaacutep
kiểm lỗi phiacutea client với jquery
Thực nghiệm
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 176 Version 11 ndash 032019
83 Annotation kiểm lỗi Ngoagravei caacutec annotation đatilde sử dụng MVC cograven định nghĩa sẵn rất nhiều annotation kiểm lỗi khaacutec
Sau đacircy lagrave danh saacutech caacutec annotation kiểm lỗi trong MVC
Annotation Mocirc tả Viacute dụ
[Required] Bắt buộc [Required] public String Namegetset
[Range(Min Max)]
Giới hạn số trong khoảng
[Range(16 65)] public String Agegetset
[StringLength(Max)] Giới hạn độ dagravei chuỗi
[StringLength (20 MinimumLength=5)] public String Passwordgetset
[EmailAddress] Định dạng email [EmailAddress] public String Emailgetset
[CreditCard]
Định dạng số thẻ tiacuten dụng
[CreditCard] public String CardNumbergetset
[Url]
Định dạng url
[Url] public String Websitegetset
[Compare(Property)]
So saacutenh giaacute trị
[Compare(ldquoPasswordrdquo)] public String ConfirmPasswordgetset
[RegularExpression(Regex)]
So khớp chuỗi
[RegularExpression(ldquod9rdquo)] public String IdCardgetset
[MinLength(Min)]
Giới hạn tối thiểu chuỗi mảng
[MinLength(1)] public String[] Hobbiesgetset
[MaxLength (Max)]
Giới hạn tối đa chuỗi mảng
[MaxLength (255)] public String Descriptiongetset
Ngoagravei caacutec annotation kiểm lỗi ở trecircn MVC cũng cung cấp annotation DataType()+ dugraveng để sinh
matilde caacutec phần tử giao diện vagrave kiểm lỗi tự động vagraveo chuẩn HTML5 cho mọi thiết bị vagrave trigravenh duyệt
hỗ trợ
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 177
DataType Trường nhậpChấp nhận Viacute dụ
Password Mật khẩu
[DataType(DataTypePassword)] public String Passwordgetset
CreditCard
Credicard
[DataType(DataType Credicard)] public String CardNumbergetset
Currency Tiền tệ theo ngocircn ngữ [DataType(DataType Currency)] public String UnitPricegetset
Date
Ngagravey theo ngocircn ngữ
[DataType(DataTypeDate)] public String Birthdaygetset
DateTime
Ngagravey giờ theo ngocircn ngữ
[DataType(DataType DateTime)] public String RegisterDategetset
Duration
Slider [DataType(DataType Duration)] public String Durationgetset
EmailAddress Email [DataType(DataType Email)] public String Emailgetset
Html
Matilde HTML [DataType(DataType Html)] public String Descriptiongetset
ImageUrl
Địa chỉ ảnh
[DataType(DataType ImageUrl)] public String Photogetset
MultilineText Textarea DataType(DataType MultilineText)] public String Descriptiongetset
PhoneNumber
Số điện thoại
DataType(DataType PhoneNumber)] public String Phonegetset
PostalCode
Matilde số bưu điện
[DataType(DataType PostalCode)] public String PostalCodegetset
Text Văn bản
[DataType(DataTypeText)] public String Namegetset
Time Thời gian [DataType(DataType Time)] public String TimePointgetset
Upload
File upload
[DataType(DataTypeUpload)] public String Photogetset
Bảng aacutenh xạ caacutec thuộc tiacutenh Data anotation thocircng dụng aacutenh xạ thagravenh thẻ html tương ứng
Attribute Input Type
[EmailAddress] type=rdquoemailrdquo
[Url] type=rdquourlrdquo
[HiddenInput] type=rdquohiddenrdquo
[Phone] type=rdquotelrdquo
[DataType(DataTypePassword)] type=rdquopasswordrdquo
[DataType(DataTypeDate)] type=rdquodaterdquo
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 178 Version 11 ndash 032019
Attribute Input Type
[DataType(DataTypeTime)] type=rdquotimerdquo
Mỗi thuộc tiacutenh coacute thể được thực hiện kiểm nhiều lỗi Vagrave chuacuteng ta coacute 2 caacutech viết annotation kiểm
lỗi Viacute dụ sau cho chuacuteng ta thấy 2 caacutech kiểm lỗi thuộc tiacutenh Age lagrave Range vagrave Required
bull Caacutech 1 Đặt caacutec annotation ngay trecircn thuộc tiacutenh cần kiểm lỗi
[Required]
[Range(16 65)]
public String Agegetset
bull Caacutech 2 Đặt caacutec kiểm lỗi trong cugraveng 1 dấu ngoặc vuocircng vagrave caacutech nhau dấu phẩy
[Required Range(16 65)]
public String Agegetset
Trecircn bảng chỉ trigravenh bagravey caacutec đối số bắt buộc Thực ra mỗi annotation coacute nhiều đối số khaacutec nhau
Trong đoacute coacute đối số ErrorMessage cho pheacutep bạn thay đổi thocircng baacuteo lỗi mặt định
[Required(ErrorMessage=rdquoVui lograveng nhập tuổi rdquo) Range(16 65)]
public String Agegetset
Sau khi kiểm lỗi nhớ kiểm tra đatilde hợp lệ trecircn Server hay chưa ở thuộc tiacutenh ModelStateIsValid
public IActionResult Update(Product pro) if (ModelStateIsValid == true) business logic else let user re-input the data
Ngoagravei chức năng generate view template dựa trecircn model bạn cũng coacute thể tự định nghĩa caacutec thẻ
nhập liệu sử dụng input tag helper theo cuacute phaacutep sau
ltinput asp-for=ModelFieldName gt
Tương ứng với caacutec tiecircu đề
ltlabel asp-for=ModelFieldNamegtltlabelgt
Riecircng thẻ textarea cần ghi rotilde lttextarea asp-for=Descriptiongtlttextareagt
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 179
Validation tag helper tương ứng ltspan asp-validation-for=ModelFieldNamegtltspangt
84 Kiểm lỗi tugravey biến
841 Kiểm lỗi phiacutea Server Với phương phaacutep kiểm lỗi đatilde giới thiệu ở trecircn bạn thấy rằng chuacuteng ta cần coacute model coacute điacutenh kegravem
khai caacutec annotation kiểm lỗi cho caacutec thuộc tiacutenh Hai cacircu hỏi lớn đặt ra lagrave
bull Kiểm lỗi form magrave khocircng sử dụng model để tiếp nhận dữ liệu của form thigrave sao
bull Coacute thể viết thecircm caacutec annotation khaacutec hay khocircng
Kiểm lỗi form khocircng sử dụng model
Chuacuteng ta phải tự viết matilde bằng tay magrave khocircng coacute được sự trợ giuacutep của annotation Trecircn server sử
dụng tự do lập trigravenh kiểm tra tiacutenh hợp lệ của dữ liệu của từng tham số vagrave sử dụng
ModelStateAddModelError() để tiacutech lũy lỗi
Trong view bạn sử dụng thuộc tiacutenh asp-validation-for để hiển thị lỗi riecircng cho caacutec thuộc tiacutenh
đatilde add trecircn ModelStateAddModelError(name message) vagrave asp-validation-summary để Hiển
thị lỗi tập trung
Viacute dụ Action Validate()
public ActionResult Validate(String FullName int Age) if (StringIsNullOrEmpty(FullName)) ModelStateAddModelError(FullName Khocircng để trống họ vagrave tecircn) else if (FullNameLength lt 5) ModelStateAddModelError(FullName Iacutet nhất 5 kyacute tự ) if (Age lt 16 || Age gt 65) ModelStateAddModelError(Age Tuổi phải từ 16 đến 65 ) if (ModelStateCount == 0) khocircng coacute lỗi nagraveo ModelStateAddModelError( Chuacutec mừng bạn đatilde nhập đuacuteng ) return View(Index)
View Indexcshtml
ViewData[Title] = Kiểm lỗi Layout = ~ViewsShared_Layoutcshtml
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 180 Version 11 ndash 032019
lth2gtKiểm lỗilth2gt HtmlValidationSummary(true) ltform asp-action=Validate asp-controller=Validator method=postgt ltdiv asp-validation-summary=ModelOnly class=text-dangergtltdivgt ltdivgtHọ vagrave tecircnltdivgt HtmlTextBox(FullName) HtmlValidationMessage(FullName) ltdivgtTuổiltdivgt HtmlTextBox(Age) HtmlValidationMessage(Age) lthr gt ltinput type=submit value=Kiểm lỗi gt ltformgt
Annotation tugravey biến
Becircn cạnh caacutec annotation dựng sẵn MVC cũng cho pheacutep bạn định nghĩa annotation riecircng cho
migravenh để sử dụng vagraveo caacutec mục điacutech riecircng
Viacute dụ nếu bạn muocircn kiểm lỗi số chẵn thigrave khocircng coacute annotation nagraveo coacute thể giuacutep bạn thực hiện điều
nagravey Nếu bạn viết matilde bằng tay thigrave lần sau gặp bạn phải viết lại Bạn rất muốn coacute annotation
riecircng dugraveng để kiểm lỗi nagravey đuacuteng khocircng
Giả sử chuacuteng ta muốn coacute annotation [EvenNumber] để kiểm lỗi thigrave cocircng việc phải lagravem của bạn
lagrave viết annotation nagravey theo mẫu sau
public sealed class EvenNumberAttribute ValidationAttribute public EvenNumberAttribute() base(Vui lograveng nhập số chẵn ) public override bool IsValid(object value) if (value == null) return true return ConvertToInt64(value) 2 == 0
Bạn chỉ cần viết matilde xử lyacute lỗi ở becircn trong phương thức IsValid() Nếu kết quả lagrave true coacute nghĩa lagrave
dữ liệu của thuộc tiacutenh muốn kiểm tra lagrave đuacuteng
Ngoagravei ra bạn cũng cần định nghĩa thocircng baacuteo lỗi mặc định cho annotation kiểm lỗi nagravey Trong bagravei
nagravey lagrave ldquoVui lograveng nhập số chẵn rdquo
Sau khi viết xong lớp nagravey bạn coacute thể sử dụng annotation [EvenNumber] y hệt như caacutec annotation
dựng sẵn Viacute dụ
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 181
[EvenNumber] public String Age get set
842 Kiểm lỗi phiacutea client Kiểm duyệt dữ liệu form nhập trước khi chuyển dữ liệu đến server để xử lyacute lagrave nhiệm vụ cực kỳ
quan trọng Rất nhiều tiecircu chiacute được đặt ra để kiểm duyệt tugravey thuộc vagraveo yecircu cầu cụ thể của form
nhập liệu Dugrave sao vẫn coacute thể liệt kecirc một số tiecircu chiacute kiểm duyệt chung chung như sau
Khocircng cho để trống ocirc nhậphellip Dữ liệu nhập vagraveo phải theo một khuocircn dạng nhất định nagraveo đoacute email creditcard urlhellip Dữ liệu phải nhập vagraveo phải đuacuteng kiểu số nguyecircn số thực ngagravey giờhellip Dữ liệu nhập vagraveo phải coacute giaacute trị tối thiểu tối đa trong phạm vihellip Dữ liệu nhập phải đuacuteng theo một kết quả tiacutenh toaacuten riecircng của bạnhellip
Bacircy giờ chuacuteng ta hatildey khaacutem phaacute khả năng kiểm duyệt dữ liệu đầu vagraveo của Jquery
Để sử dụng jQuery Validation bạn vagraveo trang httpjqueryvalidationorg để tải lấy bản mới nhất
Matilde view cshtml
model FirstWebAppModelsEmployeeInfo ViewData[Title] = jQueryValidate Layout = ~ViewsShared_Layoutcshtml lth2gtjQuery Validatelth2gt lthr gt ltdiv class=rowgt ltdiv class=col-md-4gt ltform asp-action=jQueryCheckValidate id=form1gt ltdivgtNameltdivgt HtmlTextBox(FullName) ltdivgtAgeltdivgt HtmlTextBox(Age) lthr gt ltinput type=submit value=Submit gt ltdiv id=errors gt ltformgt ltdivgt ltdivgt section Scripts await HtmlRenderPartialAsync(_ValidationScriptsPartial) ltscript type=textjavascriptgt $(document)ready(function () $(form1)validate( rules txtName required true minlength 3 txtAge required true digits true range [25 65] messages
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 182 Version 11 ndash 032019
txtAge digits Nhập số txtName required Khocircng để trống minlength Iacutet nhất 3 kyacute tự errorLabelContainer myError wrapper li submitHandler function (form) if (confirm(Dữ liệu form đatilde hợp lệ Bạn coacute muốn submit khocircng )) formsubmit() ) ) ltscriptgt ltstyle type=textcssgt labelerror color Red inputerror background-color Red color yellow ltstylegt
Phacircn tiacutech viacute dụ
Thư viện cần thiết cho việc bẩy lỗi
Cấu truacutec cơ bản của phương thức validate() dugraveng để cagravei đặt caacutec tugravey chọn bẩy lỗi
ltscript type=textjavascriptgt
$(document)ready(function ()
$(form1)validate(
rules ltkhai baacuteo luật bẩy lỗi cho caacutec trườnggt messages ltđịnh nghĩa caacutec thocircng baacuteo lỗigt
errorLabelContainer sbquoltkhai baacuteo thẻ chứa lỗigt‛
wrapper sbquoltkhai baacuteo thẻ bọc lỗigt‛
submitHandler lthagravem xử lyacute submitgt
) )
ltscriptgt
Trong bagravei nagravey
Khai baacuteo luật bẩy lỗi cho caacutec trường
rules
txtName required true minlength 3 txtAge required true digits true range [2060]
o txtName khocircng được để trống phải coacute iacutet nhất 3 kyacute tự
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 183
o txtAge khocircng được để trống phải lagrave số nguyecircn vagrave thuộc khoản (20 60) Định nghĩa caacutec thocircng baacuteo lỗi
Sau đacircy lagrave danh saacutech caacutec luật kiểm lỗi trong JQuery
Luật Mocirc tả Viacute dụ
required Bắt buộc nhập requiredtrue
required Bắt buộc nhập nếu tập kết quả của selector rỗng requiredrdquochkHobyblankrdquo
required Bắt buộc nhập nếu kết quả trả về coacute giaacute trị false required function()return true
email Định dạng email emailtrue
url Đạnh dạng url urltrue
date Đạnh dạng ngagravey javascript datetrue
number Số thực numbertrue
digits Số nguyecircn digitstrue
creditcard Định dạng creditcard creditcardtrue
minlength Số kyacute tự tối thiểu minlength10
maxlength Số kyacute tự tối đa maxlength100
rangelength Số kyacute tự từ min đến max rangelength[10 100]
min Giaacute trị tối thiểu min10
max Giaacute trị tối thiểu max100
range Giaacute trị từ min đến max range[10100]
accept Kiểu mở rộng file acceptrdquodoc|xsl|pdfrdquo
equalTo So saacutenh giaacute trị của phần tử vagrave giaacute trị của selector equalTordquotxtPasswordrdquo
remote Hợp lệ khi kết quả kiểm tra từ xa lagrave false remote ldquocheckaspxrdquo
Chuacute yacute bạn coacute 2 caacutech để khai baacuteo luật bẩy lỗi
minus Khai baacuteo trong tugravey chọn rules như trong viacute dụ trecircn trecircn
minus Khai baacuteo ngay trong thẻ bạn muốn bẩy lỗi
Viacute dụ để kiểm lỗi cho ocirc nhập txtAge của viacute dụ trecircn bạn coacute thể khai baacuteo ngay trecircn thẻ ltinputgt
như sau
ltinput class=required digits min=rdquo25rdquo max=rdquo65rdquo id=txtAge gt
Luật kiểm lỗi do người dugraveng định nghĩa
Trecircn đacircy chỉ lagrave danh saacutech caacutec luật phổ thocircng hagraveng ngagravey Bạn coacute thể coacute những qui luật riecircng của
migravenh magrave chỉ coacute bạn mới coacute thể hiểu vagrave định nghĩa được Vigrave vậy Jquery cung cấp cho bạn một
caacutech định nghĩa caacutec luật mới của riecircng migravenh Hatildey xem vagrave phacircn tiacutech viacute dụ sau để hiểu rotilde caacutech để
định nghĩa một luật mới
lthtmlgt ltheadgt
ltscript src=jqueryminjsgtltscriptgt
ltscript src=jqueryvalidatejsgtltscriptgt ltscript type=textjavascriptgt
--Định nghĩa hagravem kiểm tra số di động việt nam--
function fnValidateMobile(value element)
var regex = ^0[0-9]910$g return thisoptional(element) || regextest(value)
--Định nghĩa hagravem kiểm tra số xe gắn maacutey sagravei gograven-- function fnValidateSaigonMoto(value element)
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 184 Version 11 ndash 032019
var regex = ^5d-[A-Z]d-d4$g
return thisoptional(element) || regextest(value)
--Định nghĩa hagravem kiểm tra IP mạng maacutey tiacutenh--
function fnValidateNetuworkIP(value element)
var regex = ^d3d3d3d3$g if (thisoptional(element) || regextest(value))
var nums = valuesplit() for (var i = 0 i lt numslength i++)
if (parseInt(nums[0]) gt 255)
return false
else return false
return true
--Định nghĩa hagravem kiểm tra mục chọn của combo box--
function fnValidateSelectOne(value element)
return (elementvalue = none)
--Định nghĩa luật kiểm tra kết hợp với hagravem vagrave một thocircng
baacuteo lỗi nếu kết quả trả về của hagravem coacute giaacute trị false-- $validatoraddMethod(selectone fnValidateSelectOne Please select an item)
$validatoraddMethod(vinaphone fnValidateMobile Please enter a valid VinaPhone number)
$validatoraddMethod(saigonmoto fnValidateSaigonMoto Please enter a valid Saigon moto number)
$validatoraddMethod(networkip fnValidateNetuworkIP Please enter valid a network IP) ltscriptgt
ltscript type=textjavascriptgt
$(document)ready(function () $(form1)validate(
rules
sport selectone true mobile vinaphone true
messages
sport selectone Vui lograveng chọn mocircn thể thao
mobile vinaphone Khocircng phải số di động ở Việt nam
)
) ltscriptgt
ltstyle type=textcssgt
labelerror
color Red
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 185
ltstylegt
ltheadgt ltbodygt
lth1gtLuật kiểm tra tugravey biếnlth1gt ltform id=form1gt
Số xe maacutey Sagravei gograven
ltinput type=text id=moto name=moto class=required saigonmotogt
Địa chỉ server ltinput type=text id=ip name=ip class=networkipgt
Số điện thoại di động ltinput type=text id=mobile name=mobilegt
Thể thao
ltselect name=sport id=sportgt
ltoption value=nonegtChọn mocircn thể thaoltoptiongt ltoption value=baseballgtBoacuteng chagraveyltoptiongt
ltoption value=basketballgtBoacuteng rỗltoptiongt ltoption value=volleyballgtBoacuteng chuyềnltoptiongt
ltoption value=footballgtBoacuteng đatildeltoptiongt ltselectgt
ltinput class=submit type=submit value=Validategt ltformgt
ltbodygt lthtmlgt
Trong bagravei trecircn chuacuteng ta định nghĩa 4 luật kiểm tra mới lagrave vinaphone saigonmoto networkip
vagrave selectone Vagrave sau đoacute aacutep dụng để kiểm tra dữ liệu cho caacutec thagravenh phần giao diện trecircn form
Để hiểu được cơ chế định nghĩa vagrave sử dụng chuacuteng ta cần thực hiện caacutec bước sau
Bước 1 Định nghĩa cần 2 bước lagrave viết hagravem kiểm tra vagrave khai baacuteo luật kiểm với Jquery
Viết hagravem kiểm tra
--Định nghĩa hagravem kiểm tra số di động việt nam--
function fnValidateMobile(value element) var regex = ^0[0-9]910$g
return thisoptional(element) || regextest(value)
Cuacute phaacutep của hagravem nagravey phải nhận 2 tham số vagraveo lagrave value (giaacute trị nhập vagraveo) vagrave element (phần
tử gacircy lỗi) Hagravem nagravey phải trả về kết quả true (đatilde hợp lệ) hoặc false (khocircng hợp lệ) Bạn coacute
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 186 Version 11 ndash 032019
thể phacircn tiacutech giaacute trị để thực hiện kiểm tra nhờ vagraveo tham số value vagrave thay đổi css hay giaacute trị
của phần tử nagravey thocircng qua tham số element
Khai baacuteo luật kiểm với Jquery
Sau khi đatilde định nghĩa hagravem kiểm tra bước tiếp theo lagrave định nghĩa luật kiểm tương ứng với
hagravem trecircn vagrave tất nhiecircn cung cấp thocircng baacuteo lỗi
--Định nghĩa luật kiểm tra kết hợp với hagravem thocircng baacuteo lỗi nếu kết quả trả về của hagravem lagrave false--
$validatoraddMethod(vinaphone fnValidateMobile
Please enter a valid VinaPhone number)
Sử dụng phương thức $validatoraddMethod(rule method message) để khai baacuteo luật kiểm
Tham số rule (ldquovinaphonerdquo) lagrave tecircn luật mới tham số method (ldquofnValidateMobilerdquo) lagrave tecircn
phương thức kết hợp với luật mới vagrave message (ldquoPlease enter a valid VinaPhone numberrdquo) lagrave
thocircng baacuteo lỗi
Bước 2 Sử dụng
Bạn sử dụng caacutec luật mới như caacutec luật đatilde định nghĩa sẵn trong Jquery Cụ thể lagrave bạn coacute thể chỉ
định trong tugravey chọn rules (rules mobile vinaphone true ) của phương thức validate hoặc
chỉ ra trecircn thẻ cần kiểm tra ldquoltinput type=text id=moto name=moto class=required
saigonmotogtrdquo
843 Regular Expression Regular expression (biểu thức thường quy) lagrave một chuỗi kiacute tự đặc biệt được dugraveng như mẫu
(pattern) để so khớp (matching) với caacutec chuỗi
Loại Mocirc tả
Caacutec kiacute số d (hoặc [0-9]
Kiacute tự khocircng phải số [^d] hay [^0-9] hay D
Kiacute tự w
Kiacute tự đặc biệt W
mn So khớp từ m đến n lần
m So khớp chiacutenh xaacutec m lần
m So khớp m lần hay hơn
bull Hay 0 So khớp từ 0 đến n lần
+ hay 1 So khớp từ 1 đến n lần
hay 01 So khớp từ 0 hay 1 lần
Dung để biến kiacute tự đoacute lagrave kiacute tự
bigravenh thường
Cuacute phaacutep sử dụng trong javascript
patternmodifier
pattern lagrave chuỗi mẫu dugraveng so khớp
modifier dugraveng để so khớp theo tiecircu chuẩn gồm
Modifier Mocirc tả
i So khớp khocircng phacircn biệt hoa thường
g So khớp tất cả thay vigrave dừng tại mẫu so khớp đầu tiecircn khi tigravem thấy
m Thực hiện so khớp nhiều dograveng
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 187
Dugraveng đối tượng RegExp
Phương thức Mocirc tả
exec() Kiểm tra một so khớp trong một chuỗi Trả về so khớp đầu tiecircn
test() Kiểm tra một so khớp trong một chuỗi Trả về true hay false
toString() Trả về giaacute trị chuỗi của regular expression
compile() Biecircn dịch một regular expression Khocircng chấp nhận trong phiecircn bản 15
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 188 Version 11 ndash 032019
Database amp EntityFramework
91 SQL vagrave cơ sở dữ liệu quan hệ
911 Khaacutei niệm SQL
minus SQL (Structured Query Language - ngocircn ngữ hỏi coacute cấu truacutec) lagrave cocircng cụ sử dụng để tổ
chức quản lyacute vagrave truy xuất dữ liệu được lưu trữ trong caacutec cơ sở dữ liệu
minus SQL lagrave một hệ thống ngocircn ngữ bao gồm tập caacutec cacircu lệnh sử dụng để tương taacutec với cơ sở
dữ liệu quan hệ
minus SQL được sử dụng để điều khiển tất cả caacutec chức năng magrave một hệ quản trị cơ sở dữ liệu
cung cấp cho người dugraveng bao gồm
o Định nghĩa dữ liệu SQL cung cấp khả năng định nghĩa caacutec cơ sở dữ liệu caacutec cấu
truacutec lưu trữ vagrave tổ chức dữ liệu cũng như mối quan hệ giữa caacutec thagravenh phần dữ liệu
o Truy xuất vagrave thao taacutec dữ liệu Với SQL người dugraveng coacute thể dễ dagraveng thực hiện caacutec
thao taacutec truy xuất bổ sung cập nhật vagrave loại bỏ dữ liệu trong caacutec cơ sở dữ liệu
o Điều khiển truy cập SQL coacute thể được sử dụng để cấp phaacutet vagrave kiểm soaacutet caacutec
thao taacutec của người sử dụng trecircn dữ liệu đảm bảo sự an toagraven cho cơ sở dữ liệu
o Đảm bảo toagraven vẹn dữ liệu SQL định nghĩa caacutec ragraveng buộc toagraven vẹn trong cơ sở
dữ liệu nhờ đoacute đảm bảo tiacutenh hợp lệ vagrave chiacutenh xaacutec của dữ liệu trước caacutec thao taacutec
cập nhật cũng như caacutec lỗi của hệ thống
912 Vai trograve của SQL
minus SQL khocircng phải lagrave một hệ quản trị cơ sở dữ liệu do noacute khocircng thể tồn tại độc lập
minus SQL lagrave một phần của hệ quản trị cơ sở dữ liệu noacute xuất hiện trong caacutec hệ quản trị cơ sở
dữ liệu với vai trograve ngocircn ngữ vagrave lagrave cocircng cụ giao tiếp giữa người sử dụng vagrave hệ quản trị cơ
sở dữ liệu
minus SQL coacute những vai trograve như sau
o SQL lagrave ngocircn ngữ hỏi coacute tiacutenh tương taacutec Người sử dụng coacute thể dễ dagraveng thocircng
qua caacutec trigravenh tiện iacutech để gởi caacutec yecircu cầu dưới dạng caacutec cacircu lệnh SQL đến cơ sở dữ
liệu vagrave nhận kết quả trả về từ cơ sở dữ liệu
o SQL lagrave ngocircn ngữ lập trigravenh cơ sở dữ liệu Caacutec lập trigravenh viecircn coacute thể nhuacuteng caacutec
cacircu lệnh SQL vagraveo trong caacutec ngocircn ngữ lập trigravenh để xacircy dựng necircn caacutec chương trigravenh
ứng dụng giao tiếp với cơ sở dữ liệu
o SQL lagrave ngocircn ngữ quản trị cơ sở dữ liệu Thocircng qua SQL người quản trị cơ sở
dữ liệu coacute thể quản lyacute được cơ sở dữ liệu định nghĩa caacutec cấu truacutec lưu trữ dữ liệu
điều khiển truy cập cơ sở dữ liệu
o SQL lagrave ngocircn ngữ cho caacutec hệ thống khaacutechchủ (clientserver) Trong caacutec hệ
thống cơ sở dữ liệu khaacutechchủ SQL được sử dụng như lagrave cocircng cụ để giao tiếp giữa
caacutec trigravenh ứng dụng phiacutea maacutey khaacutech với maacutey chủ cơ sở dữ liệu
o SQL lagrave ngocircn ngữ truy cập dữ liệu trecircn Internet Cho đến nay hầu hết caacutec maacutey
chủ Web cũng như caacutec maacutey chủ trecircn Internet sử dụng SQL với vai trograve lagrave ngocircn ngữ
để tương taacutec với dữ liệu trong caacutec cơ sở dữ liệu
o SQL lagrave ngocircn ngữ cơ sở dữ liệu phacircn taacuten Đối với caacutec hệ quản trị cơ sở dữ liệu
phacircn taacuten mỗi một hệ thống sử dụng SQL để giao tiếp với caacutec hệ thống khaacutec trecircn
mạng gởi vagrave nhận caacutec yecircu cầu truy xuất dữ liệu với nhau
o SQL lagrave ngocircn ngữ sử dụng cho caacutec cổng giao tiếp cơ sở dữ liệu Trong một
hệ thống mạng maacutey tiacutenh với nhiều hệ quản trị cơ sở dữ liệu khaacutec nhau SQL thường
được sử dụng như lagrave một chuẩn ngocircn ngữ để giao tiếp giữa caacutec hệ quản trị cơ sở
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 189
dữ liệu (HQTCSDL)
913 Mocirc higravenh dữ liệu quan hệ minus CSDL quan hệ lagrave một CSDL trong đoacute tất cả dữ liệu được tổ chức trong caacutec bảng (table) coacute mối
quan hệ với nhau Mỗi bảng (table) bao gồm caacutec dograveng (recordbản ghibộ) vagrave caacutec cột
fieldtrườngthuộc tiacutenh)
minus Toacutem lại một CSDL bao gồm nhiều bảng (table) coacute mối quan hệ với nhau (relationship)
minus Viacute dụ
914 Bảng (Table) Bảng (table) bao gồm caacutec yếu tố sau
- Tecircn của bảng được xaacutec định duy nhất
- Cấu truacutec của bảng tập hợp caacutec cột (fieldtrườngthuộc tiacutenh)
- Dữ liệu của bảng tập hợp caacutec dograveng (recordbản ghibộ) hiện coacute trong bảng
Viacute dụ Table DONVI
MADONVI TENDONVI DIENTHOAI
01 Phograveng Kế toaacuten 8214514
02 Phograveng Tổ chức 8314144
03 Phograveng Điều hagravenh 8232356
04 Phograveng Đối ngoại 8412345
05 Phograveng Tagravei vụ 8214515
915 Khoacutea chiacutenh của bảng (Primary Key) minus Mỗi bảng phải coacute một cột (hoặc một tập caacutec cột) magrave giaacute trị dữ liệu của noacute xaacutec định duy nhất
một dograveng trong tập hợp caacutec dograveng trong bảng
- Một cột (hoặc một tập caacutec cột) coacute tiacutenh chất nagravey gọi lagrave khoacutea chiacutenh của bảng (Primary Key)
- Viacute dụ Table DONVI ở trecircn coacute khoacutea chiacutenh lagrave MADONVI
916 Mối quan hệ (Relationship) vagrave khoacutea ngoại (Foreign Key) - Mối quan hệ (Relationship) được thể hiện thocircng qua ragraveng buộc giaacute trị dữ liệu xuất hiện ở
bảng nagravey phải coacute xuất hiện trước ở một bảng khaacutec
- Một cột (hoặc tập hợp caacutec cột) (fieldtrườngthuộc tiacutenh) trong một bảng magrave giaacute trị của
noacute được xaacutec định từ khoacutea chiacutenh (Primary Key) của một bảng khaacutec được gọi lagrave khoacutea ngoại
(Foreign Key)
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 190 Version 11 ndash 032019
MADONVI TENDONVI DIENTHOAI
01 Phograveng Kế toaacuten 8214514
02 Phograveng Tổ chức 8314144
03 Phograveng Điều hagravenh 8232356
04 Phograveng Đối ngoại 8412345
05 Phograveng Tagravei vụ 8214515
MANV HOTEN NGAYSINH DIACHI DIENTHOAI MADONVI
NV01001 Nguyễn Ngọc Hoa 15051985 123 Trương Định 38352030 01
NV02001 Lecirc Thanh Tugraveng 03051996 32 Trần Phuacute 38236463 02
NV02002 Hoagraveng Đigravenh Tugraveng 08081988 66 Hoagraveng Diệu 39353535 02
NV03001 Nguyecircn Ngọc 19091989 77 Nguyễn Huệ 39292174 03
NV03002 Lyacute Thanh Tugraveng 12021992 7 Thagravenh Thaacutei 26636363 03
NV04001 Lecirc Sao Mai 06051965 123 Lecirc Lợi 0909123654 04
92 Sơ lược về cacircu lệnh SQL
921 Caacutec cacircu lệnh Cacircu lệnh Chức năng
Thao taacutec dữ liệu
SELECT Truy vấn dữ liệu
INSERT Thecircm mới dữ liệu
UPDATE SửaCập nhật dữ liệu
DELETE Xoacutea dữ liệu
TRUNCATE Xoacutea toagraven bộ dữ liệu trong bảng
Định nghĩa dữ liệu
CREATE TABLE Tạo bảng
DROP TABLE Xoacutea bảng
ALTER TABLE Sửa bảng
CREATE FUNCTION Tạo hagravem (do người sử dụng định nghĩa)
ALTER FUNCTION Sửa đổi hagravem
DROP FUNCTION Xoacutea hagravem
CREATE TRIGGER Tạo trigger
ALTER TRIGGER Sửa trigger
DROP TRIGGER Xoacutea trigger
922 Quy tắc sử dụng tecircn trong SQL - Trong cacircu lệnh SQL nếu ta cần chỉ đến một bảng do một người dugraveng khaacutec sở hữu (hiển
nhiecircn lagrave phải được pheacutep) thigrave tecircn của bảng phải được viết sau tecircn của người sở hữu vagrave phacircn caacutech với tecircn người sở hữu bởi dấu chấm theo cocircng thức tecircn_người_sở_hữutecircn_bảng
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 191
- Trong cacircu lệnh SQL nếu coacute sử dụng từ hai cột trở lecircn coacute cugraveng tecircn trong caacutec bảng khaacutec nhau thigrave bắt buộc phải chỉ định thecircm tecircn bảng trước tecircn cột tecircn bảng vagrave tecircn cột được phacircn caacutech nhau bởi dấu chấm theo cocircng thức tecircn_bảngtecircn_cột
923 Kiểu dữ liệu Tecircn kiểu Mocirc tả
CHAR (n) Kiểu chuỗi với độ dagravei cố định
NCHAR (n) Kiểu chuỗi với độ dagravei cố định hỗ trợ UNICODE
VARCHAR (n) Kiểu chuỗi với độ dagravei chiacutenh xaacutec
NVARCHAR (n) Kiểu chuỗi với độ dagravei chiacutenh xaacutec hỗ trợ UNICODE
INTEGER Số nguyecircn coacute giaacute trị từ -231 đến 231 ndash 1
INT Giống kiểu INTEGER
TINYINT Số nguyecircn coacute giaacute trị từ 0 đến 255
SMALLINT Số nguyecircn coacute giaacute trị từ -215 đến 215 ndash 1
BIGINT Số nguyecircn coacute giaacute trị từ -263 đến 263 ndash 1
NUMERIC (p s) Kiểu số với độ chiacutenh xaacutec cố định
DECIMAL (p s) Giống kiểu NUMERIC
FLOAT Số thực coacute giaacute trị từ - 179E+308 đến 179E+308
REAL Số thực coacute giaacute trị từ - 34E+38 đến 34E+38
MONEY Kiểu tiền tệ
BIT Kiểu bit (coacute giaacute trị 0 hoặc 1)
DATETIME Kiểu ngagravey giờ (chiacutenh xaacutec đến phần trăm của giacircy)
SMALLDATETIME Kiểu ngagravey giờ (chiacutenh xaacutec đến phuacutet)
BINARY Dữ liệu nhị phacircn với độ dagravei cố định (tối đa 8000 bytes)
VARBINARY Dữ liệu nhị phacircn với độ dagravei chiacutenh xaacutec (tối đa 8000 bytes)
IMAGE Dữ liệu nhị phacircn với độ dagravei chiacutenh xaacutec (lt= 2147483647 bytes)
TEXT Dữ liệu kiểu chuỗi với độ dagravei lớn (tối đa 2147483647 kyacute tự)
NTEXT Dữ liệu kiểu chuỗi với độ dagravei lớn vagrave hỗ trợ UNICODE (tối đa 1073741823 kyacute tự)
924 Toaacuten tử Toaacuten tử Yacute nghĩa
a) Logic
AND OR Vagrave Hoặc
b) So saacutenh
= Bằng
gt Lớn hơn
gt= Lớn hơn hay bằng
lt Nhỏ hơn
lt= Nhỏ hơn hay bằng
ltgt hoặc = Khaacutec
c) Danh saacutech
IN Nằm trong danh saacutech
NOT IN Khocircng nằm trong danh saacutech
d) Giới hạn dữ liệu
BETWEEN BETWEEN a AND b nghĩa lagrave a le giaacute trị le b
NOT BETWEEN NOT BETWEEN a AND b nghĩa lagrave (giaacute trị lt a) vagrave (giaacute trị gt b)
LIKE Mocirc tả định dạng dữ liệu sử dụng kyacute tự đại diện bull kyacute tự bất kỳ (khocircng hoặc nhiều) bull _ một kyacute tự bất kỳ bull [] một kyacute tự bất kỳ nằm trong danh saacutech chỉ định
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 192 Version 11 ndash 032019
bull [^] một kyacute tự bất kỳ khocircng nằm trong danh saacutech chỉ định
93 View Stored Procedure Trigger Function SQL Server cho pheacutep bạn tạo ra 4 đối tượng bằng caacutech lập trigravenh Stored Procedure View
Trigger Function
931 Bảng ảo ndash View bull View coacute thể được xem như một Table ảo (noacute khocircng được lưu trữ lecircn đĩa về mặt vật lyacute như
Table thocircng thường) magrave dữ liệu của noacute được lấy ra từ một cacircu truy vấn coacute chứa cột vagrave dữ
liệu từ một hay nhiều Table khaacutec nhau hay từ những View khaacutec nhau
bull ETHặc điểm của View lagrave ta coacute thể join dữ liệu từ nhiều Table vagrave trả về một tập kết quả đơn
Ngoagravei ra ta coacute thể thao taacutec dữ liệu trước khi trả về cho user bằng caacutech dugraveng caacutec lệnh SQL
như where casehellip
bull Lợi iacutech của View
o Coacute khả năng tăng tiacutenh bảo mật View giuacutep ta che giấu cấu truacutec của cacircu truy vấn becircn
trong Sau khi tạo xong View ta coacute thể Insert Delete Update như 1 Table bigravenh thường
o Giảm độ phức tạp Viacute dụ như User chỉ muốn xem thocircng tin của một vagravei cột với một
điều kiện nagraveo đoacute View cung cấp đuacuteng dữ liệu họ muốn magrave khocircng coacute dữ liệu thừa
bull Cuacute phaacutep tạo VIEW
CREATE VIEW lttecircn_viewgt
AS
ltcacircu_lệnh_sqlgt
bull Sử dụng VIEW giống như table
932 Stored Procedure bull SP (Stored Procedure) lagrave tecircn được đặt cho một nhoacutem caacutec mệnh đề SQL được tạo ra vagrave lưu
trong server database
bull SP cho pheacutep truyền tham số vagrave coacute thể được gọi bởi nhiều Client qua mạng với caacutec tham số
khaacutec nhau Khi SP bị thay đổi tất cả Client sẽ tự động nhận được bản mới vigrave SP được lưu ở
Server chứ khocircng phải Client
bull SQL Server cung cấp một số caacutec thủ tục được lưu trữ sẵn trong hệ thống giuacutep thực hiện một
số cocircng việc thường xuyecircn Noacute được gọi lagrave thủ tục hệ thống ndash System stored procedures
Cograven những thủ tục do người sử dụng tự viết gọi lagrave User stored procedures
bull Lợi iacutech của SP
o Tăng tốc độ thực hiện tốc độ truy cập dữ liệu nhanh hơn
o Chương trigravenh được module hoacutea
o Nhất quaacuten
o Nacircng cao khả năng bảo mật dữ liệu
bull Cuacute phaacutep định nghĩa User-defined Stored Procedure
CREATE PROC[EDURE] ltprocedure_namegt
ltParaName1gt ltDataType1gt = ltDefaultValue1gt
ltParaName2gt ltDataType2gt = ltDefaultValue2gt
hellip
ltParaNameNgt ltDataTypeNgt = ltDefaultValueNgt
AS
BEGIN
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 193
--SQL statements
END
bull Thực thi Stored Procedure
EXEC[UTE] lttecircn_stored_proceduregt [danh_saacutech_tham_số]
933 Trigger bull Trigger gắn liền với một bảng vagrave được tự động thực hiện khi coacute sự thay đổi dữ liệu (Insert
Delete hay Update taacutec động trecircn một bảng cụ thể)
bull Tuy nhiecircn khaacutec với Stored Procedure Trigger hoagraven toagraven khocircng coacute tham số
bull Trigger coacute thể gọi thực thi Stored Procedure vagrave được lưu trữ quản lyacute trecircn Server Database
bull Dugraveng Trigger trong trường hợp ta muốn kiểm tra caacutec ragraveng buộc toagraven vẹn trong Database
bull Cuacute phaacutep chung để tạo một Trigger như sau
CREATE TRIGGER Ten_Trigger ON Ten_Bang FOR [INSERT] | [UPDATE] | [DELETE] AS BEGIN
--Cac_Cau_Lenh_Cua_Trigger END
934 Function bull Function lagrave hagravem trong ngocircn ngữ lập trigravenh để thực hiện một pheacutep tiacutenh hay một xử lyacute nagraveo đoacute
bull Mục điacutech Dugraveng để tiacutenh giaacute trị từ 01 hay nhiều cacircu lệnh SQL
bull Cuacute phaacutep
CREATE FUNCTION lttecircn_hagravemgt (
-- danh_saacutech_tham_số ltParaName1gt ltDataTypegt
) RETURNS ltReturnDataTypegt AS BEGIN -- Cacircu lệnh SQL RETURN ltkết_quả_trả_vềgt END
bull Viacute dụ
CREATE FUNCTION fnDoanhSo
(
MaHH INT
)
RETURNS FLOAT
AS
BEGIN
DECLARE DoanhSo FLOAT
SELECT DoanhSo = SUM(SoLuong DonGia) FROM ChiTietHoaDon
WHERE MaHH = MaHH
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 194 Version 11 ndash 032019
RETURN DoanhSo
END
Vagrave gọi hagravem (chuacute yacute thecircm dbo trước tecircn hagravem)
SELECT MaHH dbofnDoanhSo(MaHH) FROM HangHoa
94 Giới thiệu Entity Framework Core Entity Framework Core lagrave một phiecircn bản matilde nguồn mở nhỏ nhẹ coacute thể mở rộng vagrave đa nền
tảng nằm trong bộ Entity Framework EF Core lagrave bộ aacutenh xạ đối tượng ndash quan hệ (Object Relation
Mapping) cho pheacutep caacutec lập trigravenh NET lagravem việc với CSDL quan hệ thocircng qua caacutec đối tượng
(object) giuacutep caacutec lập trigravenh viecircn khocircng cần viết matilde cho những gigrave liecircn quan tới dữ liệu
EF Core lagrave đatilde coacute caacutec version sau
EF Core Version Release Date
EF Core 20 August 2017
EF Core 11 November 2016
EF Core 10 June 2016
Trong EF Core coacute 2 hướng tiếp cận khi lagravem việc với CSDL
Code First Tạo model caacutec đối tượng dữ liệu sau đoacute migration vagraveo Database
Dadatabase First sử dụng khi database coacute sẵn sau đoacute phaacutet sinh caacutec model dữ liệu tương
ứng
Để lagravem việc với Entity Framework Core cần sử Nuget package để cagravei database provider tương
ứng Trong giaacuteo trigravenh nagravey sử dụng database lagrave SQL Server necircn cần cagravei 2 Nuget
MicrosoftEntityFrameworkCoreSqlServer
MicrosoftEntityFrameworkCoreTools
Coacute thể sử dụng giao diện để cagravei đặt bằng caacutech chuột phải trecircn project chọn Manage Nuget
packages sau đoacute chọn goacutei tương ứng
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 195
95 Lagravem việc với CSDL theo mocirc higravenh Database First Theo mocirc higravenh nagravey bạn cần chuẩn bị sẵn Database Từ đacircy sẽ sinh ra caacutec Model
Mở Package Manage Console gotilde lệnh
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 196 Version 11 ndash 032019
PMgt Scaffold-DbContext Server= Database=EFCoreDBFirst-QLBHIntegrated
Security=True MicrosoftEntityFrameworkCoreSqlServer -OutputDir Models
Kết quả sau khi generate
Sau đacircy lagrave matilde nguồn caacutec lớp thực thể vagrave lớp ngữ cảnh sinh ra
Thực thể Loai thực thể nagravey coacute mối quan hệ một nhiều với thực thể HangHoa được biểu diễn
bởi thuộc tiacutenh HangHoas coacute kiểu IcollectionltHangHoagt
public partial class Loai public Loai() HangHoa = new HashSetltHangHoagt() public int MaLoai get set public string Hinh get set public string MoTa get set public string TenLoai get set public ICollectionltHangHoagt HangHoas get set
Thực thể HangHoa Coacute quan hệ nhiều ndash một với thực thể Loai được biểu diễn bằng thuộc tiacutenh
Loai
public partial class HangHoa public int MaHh get set public double DonGia get set public string Hinh get set public int MaLoai get set public int SoLuong get set public string TenHh get set public Loai Loai get set
Lớp ngữ cảnh DbContext lagrave đầu mối lagravem việc với CSDL Bạn coacute thể khai baacuteo chuỗi kết nối trực
tiếp trong hagravem OnConfigufing() hoặc coacute thể kết hợp lưu trong appsettingsjson vagrave gọi từ hagravem
Configuration của lớp StartUp
public partial class EFCoreDBFirst_QLBHContext DbContext public virtual DbSetltHangHoagt HangHoa get set public virtual DbSetltLoaigt Loai get set protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 197
if (optionsBuilderIsConfigured) optionsBuilderUseSqlServer(Server= Database=EFCoreDBFirst-QLBHIntegrated Security=True) protected override void OnModelCreating(ModelBuilder modelBuilder) modelBuilderEntityltHangHoagt(entity =gt entityHasKey(e =gt eMaHh) entityProperty(e =gt eMaHh)HasColumnName(MaHH) entityProperty(e =gt eTenHh) IsRequired() HasColumnName(TenHH) HasMaxLength(50) entityHasOne(d =gt dMaLoaiNavigation) WithMany(p =gt pHangHoa) HasForeignKey(d =gt dMaLoai) ) modelBuilderEntityltLoaigt(entity =gt entityHasKey(e =gt eMaLoai) entityProperty(e =gt eTenLoai) IsRequired() HasMaxLength(50) )
96 Mocirc higravenh Code First của EF Core Mocirc higravenh Code First của EF Core cho pheacutep bạn định nghĩa caacutec Entity trước sau đoacute xacircy dựng lớp
ngữ cảnh DbContext vagrave aacutenh xạ tạo CSDL
961 Entity Định nghĩa caacutec lớp thực thể (Entity Model)
Loai aacutenh xạ với bảng Loai
HangHoa aacutenh xạ với bảng HangHoa
Matilde nguồn class Loai
namespace EFCodeFirstModels public class Loai [Key]
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 198 Version 11 ndash 032019
public int MaLoai get set [Required] [MaxLength(50)] public string TenLoai get set public string MoTa get set public string Hinh get set public virtual ListltHangHoagt HangHoas get set
Matilde nguồn class HangHoa
namespace EFCodeFirstModels public class HangHoa [Key] public int MaHH get set [Required] [MaxLength(50)] public string TenHH get set public double DonGia get set public int SoLuong get set public string Hinh get set public int MaLoai get set [ForeignKey(MaLoai)] public virtual Loai Loai get set
Chuacuteng ta dugraveng từ khoaacute virtual cho Navigation property (Lop vagrave HangHoas) để tận dụng
tiacutenh năng Lazy Loading của EF Tiacutenh năng Lazy Loading cho pheacutep caacutec thuộc tiacutenh điều hướng
được cập nhật tự động từ cơ sở dữ liệu khi chuacuteng ta truy cập chuacuteng
Trong caacutec model trecircn coacute sử dụng caacutec từ khoacutea Required MaxLength Key ForeignKey để
biểu diễn caacutec ragraveng buộc (data annotation)
Caacutec quy ước quan trọng của EF khi xacircy dựng thực thể
Tecircn thực thể số iacutet sẽ aacutenh xạ với bảng cugraveng tecircn số nhiều Nếu bạn muốn aacutenh xạ đến
bảng coacute tecircn bất kỳ thigrave sử dụng [Table(ldquolttecircn-bảnggtrdquo)]
Tecircn thuộc tiacutenh cugraveng tecircn với cột Nếu bạn muốn aacutenh xạ đến cột coacute tecircn bất kỳ thigrave sử
dụng [Column(ldquolttecircn-cộtgtrdquo)]
Tecircn thuộc tiacutenh khoacutea thường đặt lagrave Id hoặc EntityId Nếu bạn muốn đặt tecircn khaacutec lagravem
khoacutea thigrave thecircm [Key] phiacutea trước
Thecircm caacutec ragraveng buộc để tạo thocircng tin cột cho cụ thể
Bảng aacutenh xạ kiểu dữ liệu của thực thể với kiểu dữ liệu của SQL Server
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 199
C Data Type Mapping to SQL Server Data Type
int int
string nvarchar(Max)
decimal decimal(182)
float real
byte[] varbinary(Max)
datetime datetime
bool bit
byte tinyint
short smallint
long bigint
double float
char object No mapping
sbyte No mapping (throws exception)
962 Tạo lớp DbContext Xacircy dựng lớp ngữ cảnh CSDL
namespace EFCodeFirstModels public class MyDbContext DbContext public DbSetltLoaigt Loai get set public DbSetltHangHoagt HangHoa get set protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) optionsBuilderUseSqlServer(Server=Database=EFCoreCodeFirst-QLBHIntegrated Security=True)
963 Thực hiện Migration CSDL PM gt Add-Migration EFCodeFirstMyDBContext
Sau khi chạy project sẽ tự thecircm thư mục Migration
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 200 Version 11 ndash 032019
Sau đoacute chạy lệnh
PMgt Update-Database
Kết quả chạy
97 Lập trigravenh Entity Framework Sau khi model được tạo bạn coacute thể lập trigravenh lagravem việc với CSDL thocircng qua một số hagravem iacutet ỏi
nhưng vocirc cugraveng đầy đủ vagrave hiệu quả đatilde được EF xacircy dựng sẵn
971 Toacutem tắt Bước 1 Tạo đối tượng DbContext
bull MyDbContext db = new MyDbContext()
Bước 2 Thao taacutec vagrave truy vấn thực thể
bull Thecircm mới thực thể
o dbAdd(loai)
bull Cập nhật thocircng tin thực thể
o dbUpdate(loai)
bull Xoacutea thực thể
o dbLoaisRemove(loai)
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 201
bull Truy vấn một thực thể theo matilde
o var loai = dbLoaisSingleOrDefault(m =gt mMaLoai == id)
bull Truy vấn tất cả thực thể
o var list = dbLoaisToList()
Bước 3 Lưu sự thay đổi
o dbSaveChanges()
972 Magraven higravenh hiển thị Loại
Bạn cần tạo LoaiController vagrave viết matilde cho action Index() để truy vấn lấy tất cả caacutec loại hiển thị
caacutec loại
public class LoaiController Controller MyDbContext db = new MyDbContext() public ActionResult Index() return View(dbLoaisToList()) return View(await dbLoaisToListAsync())
Phần view hiển thị bảng như trecircn
model IEnumerableltCodeFirstDBModelsLoaigt
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 202 Version 11 ndash 032019
ViewData[Title] = Index Layout = ~ViewsShared_Layoutcshtml lth2gtLoailth2gt ltpgt lta asp-action=CreategtCreate Newltagt ltpgt lttable class=tablegt lttheadgt lttrgt ltthgt HtmlDisplayNameFor(model =gt modelMaLoai) ltthgt ltthgt HtmlDisplayNameFor(model =gt modelTenLoai) ltthgt ltthgt HtmlDisplayNameFor(model =gt modelMoTa) ltthgt ltthgtltthgt lttrgt lttheadgt lttbodygt foreach (var item in Model) lttrgt lttdgt HtmlDisplayFor(modelItem =gt itemMaLoai) lttdgt lttdgt HtmlDisplayFor(modelItem =gt itemTenLoai) lttdgt lttdgt HtmlDisplayFor(modelItem =gt itemMoTa) lttdgt lttdgt lta asp-action=Edit asp-route-id=itemMaLoaigtEditltagt | lta asp-action=Details asp-route-id=itemMaLoaigtDetailsltagt | lta asp-action=Delete asp-route-id=itemMaLoaigtDeleteltagt lttdgt lttrgt lttbodygt lttablegt
model để khai baacuteo kiểu của đối tượng model với mục điacutech tận dụng tiacutenh thocircng minh của
cocircng cụ (chấm-xổ) Vograveng lặp foreach sẽ duyệt tất cả caacutec loại coacute trong Model mỗi loại hiển thị
một hagraveng trecircn bảng
Coacute 3 liecircn kết mỗi hagraveng
Liecircn kết Edit sẽ gọi action Edit để hiển thị chi tiết của loại cần chỉnh sửa vagrave cập nhật
Liecircn kết Details sẽ gọi action Details để hiển thị thocircng tin chi tiết của loại
Liecircn kết Delete sẽ gọi action Delete để xoacutea loại của hagraveng tương ứng trecircn bảng
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 203
973 Magraven higravenh hiển thị chi tiết Loại (Detail) Nội dung Action Details()
public ActionResult Details(int id) if (id == null) return NotFound() var loai = dbLoais SingleOrDefault(m =gt mMaLoai == id) if (loai == null) return NotFound() return View(loai)
Magraven higravenh hiển thị
Matilde của View Detailscshtml tương ứng
model CodeFirstDBModelsLoai
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 204 Version 11 ndash 032019
ViewData[Title] = Details Layout = ~ViewsShared_Layoutcshtml lth2gtDetails Loailth2gt ltdivgt lthr gt ltdl class=dl-horizontalgt ltdtgt HtmlDisplayNameFor(model =gt modelTenLoai) ltdtgt ltddgt HtmlDisplayFor(model =gt modelTenLoai) ltddgt ltdtgt HtmlDisplayNameFor(model =gt modelMoTa) ltdtgt ltddgt HtmlDisplayFor(model =gt modelMoTa) ltddgt ltdlgt ltdivgt ltdivgt lta asp-action=Edit asp-route-id=ModelMaLoaigtEditltagt | lta asp-action=IndexgtBack to Listltagt ltdivgt
974 Magraven higravenh chỉnh sửa Loại Nội dung action Edit()
GET LoaiEdit5 public ActionResult Edit(int id) if (id == null) return NotFound() var loai = dbLoaisSingleOrDefault(m =gt mMaLoai == id) if (loai == null) return NotFound() return View(loai)
View của action Edit hiển thị thocircng tin loại được chọn lecircn form vagrave đợi thao taacutec cập nhật như sau
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 205
Matilde của view Edit được thiết kế như sau model CodeFirstDBModelsLoai ViewData[Title] = Edit Layout = ~ViewsShared_Layoutcshtml lth2gtEdit Loailth2gt lthr gt ltdiv class=rowgt ltdiv class=col-md-4gt ltform asp-action=Editgt ltdiv asp-validation-summary=ModelOnly class=text-dangergtltdivgt ltinput type=hidden asp-for=MaLoai gt ltdiv class=form-groupgt ltlabel asp-for=TenLoai class=control-labelgtltlabelgt ltinput asp-for=TenLoai class=form-control gt ltspan asp-validation-for=TenLoai class=text-dangergtltspangt ltdivgt ltdiv class=form-groupgt ltlabel asp-for=MoTa class=control-labelgtltlabelgt ltinput asp-for=MoTa class=form-control gt ltspan asp-validation-for=MoTa class=text-dangergtltspangt ltdivgt ltdiv class=form-groupgt
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 206 Version 11 ndash 032019
ltinput type=submit value=Save class=btn btn-default gt ltdivgt ltformgt ltdivgt ltdivgt ltdivgt lta asp-action=IndexgtBack to Listltagt ltdivgt section Scripts await HtmlRenderPartialAsync(_ValidationScriptsPartial)
Action xử lyacute nuacutet Save vẫn lagrave action hiện hagravenh (Edit) nhưng xử lyacute với phương thức lagrave POST vagrave đối số lagrave model để nhận dữ liệu toagraven form Bổ sung thecircm vagraveo LoaiController action sau để xử lyacute cập nhật POST LoaiEdit5 [HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit(int id [Bind(MaLoaiTenLoaiMoTa)] Loai loai) if (id = loaiMaLoai) return NotFound() if (ModelStateIsValid) try dbUpdate(loai) dbSaveChanges() catch (DbUpdateConcurrencyException) if (LoaiExists(loaiMaLoai)) return NotFound() else throw return RedirectToAction(nameof(Index)) return View(loai)
975 Magraven higravenh thecircm mới (Create) Để hoagraven hảo ta bổ sung phương thức action Create() cho pheacutep thecircm một thực thể Loai Action
nagravey cần 2 phiecircn bản để hiển thị form nhập mới (GET) vagrave để nhận dữ liệu vagrave thecircm vagraveo CSDL
(POST) Sau đacircy lagrave giao diện form thecircm mới matilde view vagrave action
Thecircm vagraveo LoaiController action Create() phương thức GET
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 207
GET LoaiCreate public ActionResult Create() return View()
Matilde code của view Createcshtml
model CodeFirstDBModelsLoai ViewData[Title] = Create Layout = ~ViewsShared_Layoutcshtml lth2gtCreate Loailth2gt lthr gt
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 208 Version 11 ndash 032019
ltdiv class=rowgt ltdiv class=col-md-4gt ltform asp-action=Create asp-controller=Loaigt ltdiv asp-validation-summary=ModelOnly class=text-dangergtltdivgt ltdiv class=form-groupgt ltlabel class=control-labelgtTecircn loạiltlabelgt ltinput asp-for=TenLoai class=form-control gt ltspan asp-validation-for=TenLoai class=text-dangergtltspangt ltdivgt ltdiv class=form-groupgt ltlabel class=control-labelgtMocirc tảltlabelgt ltinput asp-for=MoTa class=form-control gt ltspan asp-validation-for=MoTa class=text-dangergtltspangt ltdivgt ltdiv class=form-groupgt ltinput type=submit value=Tạo mới class=btn btn-default gt ltdivgt ltformgt ltdivgt ltdivgt ltdivgt lta asp-action=IndexgtBack to Listltagt ltdivgt section Scripts await HtmlRenderPartialAsync(_ValidationScriptsPartial)
Action xử lyacute giao thức POST
POST LoaiCreate [HttpPost] [ValidateAntiForgeryToken] public ActionResult Create([Bind(MaLoaiTenLoaiMoTa)] Loai loai) if (ModelStateIsValid) dbAdd(loai) dbSaveChanges() return RedirectToAction(nameof(Index)) return View(loai)
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 209
976 Magraven higravenh xoacutea Loai
Thecircm caacutec action Delete() cho phương thức GET ndash để xaacutec định loại cần xoacutea vagrave phương thức
POST ndash để tiến hagravenh xoacutea Loai
GET LoaiDelete5 public ActionResult Delete(int id) if (id == null) return NotFound() var loai = dbLoaisSingleOrDefault(m =gt mMaLoai == id) if (loai == null) return NotFound() return View(loai) POST LoaiDelete5 [HttpPost ActionName(Delete)] [ValidateAntiForgeryToken] public ActionResult DeleteConfirmed(int id) var loai = dbLoaisSingleOrDefault(m =gt mMaLoai == id)
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 210 Version 11 ndash 032019
dbLoaisRemove(loai) dbSaveChanges() return RedirectToAction(nameof(Index))
Sau khi xoacutea xong sẽ chuyển đến action Index() để hiển thị danh saacutech Loai bằng lệnh return
RedirectToAction(nameof(Index))
98 LINQ
981 Giới thiệu LINQ (Language Integrated Query tạm dịch lagrave ngocircn ngữ truy vấn tiacutech hợp) đưa ra 1 mocirc higravenh
bền vững để hoạt động với caacutec dạng nguồn dữ liệu vagrave định dạng dữ liệu khaacutec nhau Trong LINQ
bạn phải lagravem quen với chuyện lagravem việc với caacutec đối tượng (objects) LINQ cho pheacutep dugraveng caacutec
đoạn code đơn giản để truy vấn vagrave chuyển đổi dữ liệu trong caacutec tagravei liệu XML cơ sở dữ liệu SQL
caacutec tập hợp NET vagrave bất kỳ định dạng nagraveo magrave LINQ provider hỗ trợ
Tất cả caacutec hoạt động truy vấn LINQ đều bao gồm 3 taacutec vụ
bull Kết nối với nguồn dữ liệu (data source)
bull Tạo truy vấn
bull Thực thi truy vấn
Caacutec biến truy vấn LINQ được biểu diễn dưới dạng IEnumerableltTgt hoặc lagrave 1 dạng nagraveo đoacute kế
thừa IEnumerableltTgt viacute dụ như IQueryableltTgt Khi chuacuteng ta gặp 1 biến truy vấn coacute dạng
IEnumerableltKhachHanggt điều nagravey coacute nghĩa lagrave khi được thực thi truy vấn sẽ sinh ra một chuỗi
caacutec đối tượng KhachHang hoặc khocircng coacute đối tượng nagraveo (rỗng)
Tigravem caacutec khaacutech hagraveng ở thagravenh phố Nha Trang IEnumerableltKhachHanggt customerQuery = from cust in KhachHangs where custThanhPho == Nha Trang select cust
982 Kỹ thuật truy vấn dữ liệu Lọc dữ liệu (Filter)
Lọc dữ liệu lagrave cacircu lệnh truy vấn phổ biến ở dạng diễn giải Boolean (đuacuteng hoặc sai) Cacircu truy vấn
chỉ trả về caacutec phần tử nếu diễn giải lagrave đuacuteng (true) Để lọc dữ liệu chuacuteng ta dugraveng mệnh đề where
trong đoacute mocirc tả caacutec điều kiện lọc
Sắp xếp (order)
Mệnh đề orderby cho pheacutep sắp xếp caacutec phần tử theo thứ tự nagraveo đoacute trong dữ liệu trả về Để sắp
xếp trường HoTen theo thứ tự alphabet với caacutec khaacutech hagraveng ở Đagrave Lạt chuacuteng ta coacute thể lagravem như
viacute dụ sau
var queryNTCustomers = from cust in KhachHangs where custCity == Nha Trang orderby custHoTen ascending select cust
Gom nhoacutem (group)
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 211
Mệnh đề group cho pheacutep gom nhoacutem kết quả dựa trecircn 1 khoacutea được mocirc tả Viacute dụ chuacuteng ta muốn
gom nhoacutem caacutec khaacutech hagraveng từ Nha Trang theo thagravenh phố (ThanhPho) trong trường hợp nagravey
custThanhPho được gọi lagrave khoacutea
var queryCustomersByCity = from cust in KhachHangs group cust by custThanhPho gom theo thagravenh phố
Kết hợp (join)
Tương tự như SQL kết hợp (join) dữ liệu xảy ra giữa caacutec tập đối tượng dữ liệu magrave chưa được
mocirc higravenh rotilde ragraveng trong nguồn dữ liệu Viacute dụ chuacuteng ta tigravem tất cả khaacutech hagraveng (KhachHangs) vagrave
caacutec nhagrave phacircn phối (NhaPhanPhois) ở cugraveng thagravenh phố Mệnh đề join trong LINQ cho pheacutep kết
hợp dữ liệu trecircn caacutec tập đối tượng theo vigrave dugraveng bảng cơ sở dữ liệu trực tiếp
var innerJoinQuery = from cust in KhachHangs join dist in NhaPhanPhois on custThanhPho equals distThanhPho select new HoTenKhachHang = custHoTen TenNhaPhanPhoi = distTen
Caacutec truy vấn khocircng chuyển đổi dữ liệu nguồn (Source Data)
Higravenh sau đacircy mocirc tả 1 truy vấn chuyển dữ liệu từ LINQ sang đối tượng magrave khocircng coacute thay đổi dữ
liệu Nguồn dữ liệu lagrave 1 danh saacutech chứa caacutec chuỗi vagrave đầu ra của truy vấn cũng lagrave 1 danh saacutech
caacutec chuỗi
1 Đối số kiểu của nguồn dữ liệu định nghĩa kiểu của biến phạm vi 2 Kiểu của đối tượng được chọn (select name) dugraveng để xaacutec định kiểu của biến truy vấn
(IEnumerableltstringgt) Trong higravenh biến name coacute kiểu lagrave 1 chuỗi vigrave vậy biến truy vấn lagrave 1 IEnumerableltstringgt
3 Biến truy vấn được lặp trong mệnh đề foreach Bởi vigrave biến truy vấn lagrave 1 danh saacutech chuỗi biến lặp cũng lagrave 1 chuỗi
Trong truy vấn trecircn kết quả khocircng lagravem thay đổi dữ liệu từ nguồn dữ liệu rotilde ragraveng chuacuteng ta thấy đầu vagraveo lagrave 1 danh saacutech chuỗi nameList (mỗi phần tử kiểu string) vagrave đầu ra cũng lagrave 1 danh saacutech chuỗi tecircn nameQuery (mỗi phần tử kiểu string)
Truy vấn chuyển đổi nguồn dữ liệu (Source Data) Tiếp theo chuacuteng ta coacute viacute dụ về một truy vấn từ LINQ sang SQL với sự thay đổi đơn giản trecircn
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 212 Version 11 ndash 032019
nguồn dữ liệu
1 Đối số kiểu của nguồn dữ liệu định nghĩa kiểu của biến phạm vi 2 Mệnh đề select trả về thuộc tiacutenh Name thay vigrave đối tượng Student Vigrave Name lagrave 1 chuỗi cho necircn
kiểu đối số của nameQuery lagrave 1 chuỗi chứ khocircng phải lagrave 1 đối tượng Student 3 Do nameQuery lagrave 1 danh saacutech chuỗi vigrave vậy biến vograveng lặp foreach cũng phải lagrave 1 chuỗi (string)
Higravenh tiếp theo mocirc tả sự chuyển đổi phức tạp hơn chuacutet iacutet Dữ liệu trả về lagrave 1 kiểu khocircng xaacutec
định với 2 thagravenh viecircn coacute mặt trong đối tượng Student ban đầu
1 Đối số kiểu của nguồn dữ liệu định nghĩa kiểu của biến phạm vi 2 Bởi vigrave mệnh đề select sinh ra 1 kiểu khocircng xaacutec định kiểu biến truy vấn phải hiểu ngầm bằng
caacutech dugraveng từ khoacutea var 3 Vigrave kiểu biến truy vấn khocircng rotilde ragraveng cho necircn biến lặp trong vograveng foreach cũng khocircng rotilde ragraveng
(kiểu var)
983 Truy vấn đối tượng Phương thức Mocirc tả Viacute dụ
Where(e =gt điều kiện) Lọc StudentsWhere(s =gt sMarks gt 9)
GroupBy(e =gt biểu thức) Nhoacutem StudentsGroupNy(s =gt sClass)
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 213
OrderBy(e =gt biểu thức)
OrderByDescending(e =gt biểu thức) Sắp xếp StudentsOrderBy(s =gt sName)
Select(e =gt đối tượng) Chọn StudentsSelect(s =gt new sName sMarks)
984 Truy vấn phacircn trang Phương thức Mocirc tả Viacute dụ
Take(số lượng) Lấy caacutec phần tử đầu StudentsTake(5)
Skip(số lượng) Bỏ caacutec phần tử đầu StudentsSkip(5)
TakeWhile(e =gt điều kiện) Lấy caacutec phần tử
thỏa điều kiện
StudentsTakeWhile(s =gt sMarks lt 4)
SkipWhile(e =gt điều kiện) Bỏ qua caacutec phần tử thỏa điều kiện
StudentsSkipWhile(s =gt sMarks lt 4)
985 Truy vấn 1 thực thể Phương thức Mocirc tả Viacute dụ
Single(e =gt điều kiện) Lấy 1 phần tử thỏa điều kiện Ngoại lệ nếu khocircng tigravem thấy hoặc nhiều hơn một
StudentsSingle(s =gt sId = 1)
First() Lấy phần tử đầu StudentsFirst()
Last() Lấy phần tử cuối StudentsLast()
986 Tổng hợp số liệu Phương thức Mocirc tả Viacute dụ
Sum(e=gtbiểu thức số học) Tiacutenh tổng StudentsSum(s =gt sMarks)
Count(e=gtbiểu thức số học) Đếm số lượng StudentsCount(s =gt sId)
Min(e=gtbiểu thức số học) Giaacute trị nhỏ nhất StudentsMin(s =gt sMarks)
Max(e=gtbiểu thức số học) Giaacute trị lớn nhất StudentsMax(s =gt sMarks)
Average(e=gtbiểu thức số học) Giaacute trị trung bigravenh StudentsAverage(s =gt sMarks)
987 Phương thức kiểm tra Phương thức Mocirc tả Viacute dụ
Contains(phần tử) Tập coacute chứa phần tử StudentsContains(sv)
Any(e=gtđiều kiện) Iacutet nhất một phần tử trong tập thỏa
điều kiện
StudentsAny(s =gt sMarks lt 3)
All(e=gtđiều kiện) Tất cả caacutec phần tử trong tập thỏa điều kiện
StudentsAll(s =gt sMarks gt= 5)
988 Ứng dụng LINQ Sau đacircy lagrave caacutec truy vấn LINQ trecircn CSDL MyeStore Caacutec truy vấn nagravey sẽ được sử dụng trong caacutec
bagravei thực hagravenh sau nagravey vagrave cả trong project cuối
Tigravem kiếm hagraveng hoacutea Đoạn matilde sau cung cấp 3 lệnh truy vấn hagraveng hoacutea với điều kiện tecircn chứa chuỗi ldquoxrdquo matilde loại lagrave
1001 vagrave giaacute từ 5 đến 10
var items1 = dbProductsWhere(p =gt pNameContains(x)) var items2 = dbProductsWhere(p =gt pCategoryId == 1001) var items3 = dbProductsWhere(p =gt pUnitPrice gt= 5 ampamp pUnitPrice lt= 10)
Phacircn trang hagraveng hoacutea Đoạn matilde sau truy vấn caacutec hagraveng hoacutea ở trang số 4 với mỗi trang lagrave 10 mặt hagraveng
var pageNo = 3 var pageSize = 10 var items4 = dbProductsSkip(pageNo pageSize)Take(pageSize)
Truy vấn hagraveng hoacutea theo matilde Truy vấn một mặt hagraveng với Single Chuacute yacute nếu khocircng tigravem thấy hoặc tigravem thấy nhiều hơn một mặt
hagraveng thigrave sẽ xảy ra ngoại lệ
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 214 Version 11 ndash 032019
var items5 = dbProductsSingle(p =gt pId == 1001)
Truy vấn hagraveng cugraveng loại Truy vấn sau đacircy sẽ cho caacutec mặt hagraveng cugraveng loại với mặt hagraveng coacute matilde số lagrave 1001
var items6 = dbProductsSingle(p =gt pId == 1001)CategoryProducts
Thống kecirc hagraveng hoacutea theo loại Nhoacutem caacutec mặt hagraveng theo loại sau đoacute tổng hợp số liệu trecircn caacutec nhoacutem Chuacute yacute trong mỗi nhoacutem coacute
thuộc tigravenh Key chiacutenh lagrave loại vagrave caacutec mặt hagraveng của loại nagravey Caacutec hagravem tổng hợp mở rộng như Sum()
Count()hellip sẽ tổng hợp số liệu trecircn mỗi nhoacutem
var items7 = dbProductsGroupBy(p =gt pCategory) Select(g =gt new ReportInfo Group = gKeyName --tecircn loại Sum = gSum(p =gt pUnitPrice) --tổng đơn giaacute hagraveng hoacutea của loại Count = gCount() --số hagraveng hoacutea của loại Min = gMin(p =gt pUnitPrice) --giaacute hagraveng hoacutea thấp nhất Max = gMax(p =gt pUnitPrice) --giaacute hagraveng hoacutea cao nhất Avg = gAverage(p =gt pUnitPrice) --giaacute trung bigravenh )
Thống kecirc doanh số baacuten hagraveng từng mặt hagraveng Nhoacutem caacutec chi tiết hoacutea đơn đatilde baacuten theo từng mặt hagraveng sau đoacute tổng hợp số liệu trecircn caacutec nhoacutem
Thocircng tin tổng hợp gồm tecircn hagraveng hoacutea tổng giaacute trị đatilde baacuten tổng số lượng đatilde baacuten giaacute baacuten cao
nhất giaacute baacuten thấp nhất giaacute trung bigravenh
var items8 = dbOrderDetailsGroupBy(d =gt dProduct) Select(g =gt new ReportInfo Group = gKeyName --tecircn hagraveng hoacutea Sum = gSum(p =gt pUnitPrice pQuantity) --tổng giaacute trị đatilde baacuten Count = gSum(p =gt pQuantity) --tổng số lượng đatilde baacuten Min = gMin(p =gt pUnitPrice) --giaacute thấp nhất Max = gMax(p =gt pUnitPrice) --giaacute cao nhất Avg = gAverage(p =gt pUnitPrice) --giaacute trung bigravenh )
Thống kecirc doanh số baacuten hagraveng từng loại hagraveng var items9 = dbOrderDetailsGroupBy(d =gt dProductCategory) Select(g =gt new ReportInfo Group = gKeyName --tecircn loại hagraveng Sum = gSum(p =gt pUnitPrice pQuantity) --tổng giaacute trị hagraveng hoacutea đatilde baacuten Count = gSum(p =gt pQuantity) --tổng số lượng đatilde baacuten Min = gMin(p =gt pUnitPrice) --giaacute thấp nhất Max = gMax(p =gt pUnitPrice) --giaacute cao nhất Avg = gAverage(p =gt pUnitPrice) --giaacute trung bigravenh )
Thống kecirc doanh số baacuten hagraveng từng khaacutech hagraveng var items10 = dbOrderDetailsGroupBy(d =gt dOrderCustomer) Select(g =gt new ReportInfo Group = gKeyFullname --họ vagrave tecircn khaacutech hagraveng
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 215
Sum = gSum(p =gt pUnitPrice pQuantity) --tổng giaacute trị hagraveng hoacutea đatilde mua Count = gSum(p =gt pQuantity) --tổng số lượng đatilde mua Min = gMin(p =gt pUnitPrice) --giaacute thấp nhất Max = gMax(p =gt pUnitPrice) --giaacute cao nhất Avg = gAverage(p =gt pUnitPrice) --giaacute trung bigravenh )
Thống kecirc doanh số baacuten hagraveng từng thaacuteng var items11 = dbOrderDetailsGroupBy(d =gt dOrderOrderDateMonth) Select(g =gt new ReportInfo Group = gKey --thaacuteng Sum = gSum(p =gt pUnitPrice pQuantity) --tổng giaacute trị hagraveng hoacutea đatilde baacuten Count = gSum(p =gt pQuantity) --tổng số lượng đatilde baacuten Min = gMin(p =gt pUnitPrice) --giaacute thấp nhất Max = gMax(p =gt pUnitPrice) --giaacute cao nhất Avg = gAverage(p =gt pUnitPrice) --giaacute trung bigravenh )
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 216 Version 11 ndash 032019
Kỹ thuật AJAX
101 Giới thiệu Ajax AJAX lagrave một cocircng nghệ cho pheacutep lập trigravenh bất đồng bộ trong ứng dụng Web Thocircng thường người dugraveng muốn thay đổi thocircng tin từ trang Web bằng caacutech nhấp vagraveo caacutec nuacutet lệnh (button) hay caacutec liecircn kết (link) để submit yecircu cầu về Web Server để thay đổi nội dung trang Web (postback) Như vậy toagraven bộ trang Web phải được xử lyacute lại do đoacute tốn khaacute nhiều thời gian vagrave gia tăng sự phản hồi caacutec trang Webhellip Cocircng nghệ Ajax (Asynchronous JavaScript and XML) cho pheacutep chỉ caacutec thocircng tin nagraveo cần thay đổi được gửi về Sever xử lyacute sau đoacute Server sẽ xử lyacute vagrave trả kết quả về cho Client Sau đacircy lagrave một vagravei thocircng tin chung sẽ giuacutep chuacuteng ta hiểu hơn về Ajax
AJAX bắt đầu phổ biến từ năm 2005 bởi Google (với một ứng dụng Google Suggest Google Maps Gmail) AJAX khocircng phải lagrave ngocircn ngữ lập trigravenh mới magrave noacute lagrave một cocircng nghệ mới để tạo ra một ứng dụng web nhỏ hơn nhanh hơn tốt hơn vagrave giao diện thacircn thiện với người dugraveng hơn
Ajax dựa trecircn caacutec thagravenh phần HTML trước đacircy
HTML
CSS
JavaScript (chủ chốt)
XML
AJAX lagrave một cocircng nghệ được hổ trợ bởi trigravenh duyệt (browser) vagrave noacute độc lập với caacutec ứng dụng Web server Với Ajax Javascript của bạn coacute thể liecircn lạc trực tiếp với Web server bằng caacutech sử dụng đối tượng XMLHttpRequest của Javascript Với đối tượng nagravey Javascript của bạn coacute thể trao đổi dữ trực tiếp Web server magrave khocircng cần đệ trigravenh (submit) toagraven bộ dữ liệu đến do đoacute trang web của bạn khocircng reload lại
Ajax sử dụng cơ chế lagravem việc bất đồng bộ (Asynchonous) tức lagrave trong khi đối tượng XMLHttpRequest thực hiện gửi yecircu cầu đến Web server thigrave Web browser vẫn tiếp tục xử lyacute caacutec cocircng việc khaacutec magrave khocircng cần Web server hoagraven thagravenh việc trả lời lại yecircu cầu đoacute Nhiều cocircng việc được sử lyacute song song với nhau điều nagravey khaacutec với caacutech lập trigravenh web cổ điển trước đacircy do đoacute ứng dụng web sẽ chạy nhanh hơn
Ajax lagrave một kĩ thuật của Web browser vagrave độc lập với Web server Tất cả Web coacute sử dụng Ajax gọi lagrave Web 20 Ajax coacute thể gởi vagrave nhận dữ liệu với nhiều định dạng khaacutec nhau bao gồm XML HTML vagrave thậm chiacute lagrave file text
102 Cơ chế lagravem việc của ajax Ta hatildey phacircn tiacutech vagrave so saacutenh caacutech thức hoạt động của một trang web thocircng thường vagrave
một trang web coacute ứng dụng Ajax để thấy rotilde caacutech thức thực hiện của Ajax
Sau khi học xong bagravei nagravey học viecircn coacute khả năng
- Hiểu được cơ chế hoạt động của Ajax
- Viết matilde jquery gọi ajax caacutec action của MVC vagrave xử lyacute caacutec loại dữ liệu trả về từ caacutec action nagravey như
text html json
- Tạo caacutec action cho pheacutep gọi ajax vagrave trả về caacutec loại dữ liệu khaacutec nhau
- Ứng dụng ajax vagraveo bagravei toaacuten thực tế để cải thiện tiacutenh hiệu quả của ứng dụng
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 217
1021 Cơ chế truyền thocircng đồng bộ Với caacutech lập trigravenh Web trước đacircy (cograven gọi lagrave Web 10) thigrave khi người dugraveng cần cập nhật thocircng tin (click vagraveo một một Button nagraveo đoacute) thigrave yecircu cầu thay đổi thocircng tin sẽ được gửi từ phiacutea Client về Server dưới dạng HTTP request toagraven bộ trang web sẽ được gửi chứ khocircng riecircng gigrave một vagravei thocircng tin cần thay đổi (dạng nagravey gọi lagrave postback) Luacutec đoacute Client sẽ rơi vagraveo trạng thaacutei chờ (waitinghellip) trong luacutec nagravey phiacutea Client khocircng thể thực hiện một cocircng việc nagraveo khaacutec Khi Server xử lyacute hoagraven thagravenh caacutec yecircu cầu vagrave thigrave sẽ gửi trả lại cho phiacutea Client một trang web khaacutec thay thế trang cũ (thong tin magrave Server response lại ở dạng HTML vagrave CSS) Qui trigravenh nagravey được mocirc tả như sau
Như vậy ta thấy caacutech thức hoạt động của 1 trang web cổ điện lagrave Click rarr waiting rarr refresh
helliprarrhellip Do đoacute cho dugrave yecircu cầu cập nhật một lượng thong tin nhỏ thigrave trang web cũng phải load lại
do đoacute caacutech trang web chạy chậm
1022 Cơ chế truyền thocircng bất đồng bộ Với caacutech lập trigravenh Web coacute ứng dụng kỹ thuật Ajax thigrave Ajax cho pheacutep tạo ra một Ajax Engine nằm
giữa UI (user interface ndash giao diện người dugraveng) vagrave Server tức lagrave nằm giữa giao tiếp Client ndash
Server nhưng phần Ajax Engine nagravey vẫn nằm ở phiacutea Client
Khi đoacute cocircng việc cocircng việc gửi request vagrave nhận response đều do Ajax Engine thực hiện Thay vigrave trả dữ liệu dưới dạng HTML vagrave CSS trực tiếp cho trigravenh duyệt Web server coacute thể gửi trả dữ liệu dạng XML vagrave Ajax Engine sẽ tiếp nhận phacircn tiacutech vagrave chuyển đổi thagravenh XHTML + CSS cho trigravenh duyệt hiển thị Việc phacircn tiacutech vagrave chuyển đổi nagravey được thực hiện trecircn Client necircn giảm tải rất nhiều cho Server đồng thời User cảm thấy kết quả xử lyacute được hiển thị tức thigrave magrave khocircng cần nạp
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 218 Version 11 ndash 032019
lại toagraven bộ trang Mặt khaacutec sự kết hợp của caacutec cocircng nghệ web như CSS vagrave XHTML lagravem cho việc trigravenh bagravey giao diện trang web tốt hơn nhiều vagrave giảm đaacuteng kể dung lượng trang phải nạp Đacircy lagrave những lợi iacutech hết sức thiết thực magrave Ajax đem lại
Ajax Engine chỉ gửi đi những thocircng tin cần thay đổi chứ khocircng phải toagraven bộ trang web do đoacute giảm được tải qua mạng
Việc gửi request vagrave nhận response do Ajax Engine thực hiện Do đoacute phiacutea Browser UI khocircng rơi vagraveo trạng thaacutei chờ (waitinghellip) tức lagrave coacute thể thực hiện nhiều việc cugraveng luacutec (Asynchronous)
Coacute thể nhigraven vagraveo 2 higravenh sau đacircy để so saacutenh hai mocirc higravenh ứng dụng Web truyền thống vagrave sử dụng Ajax
103 jQuery Ajax jQuery cung cấp khaacute nhiều hagravem để lagravem việc với ajax từ dạng thocirc cho đến dạng chuyecircn biệt
bull $ajax(options)
bull $post()
bull $get()
bull $getSON()
bull $getScript()
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 219
Trong đoacute $ajax(options) lagrave phương thức thocirc vagrave lagrave gốc gaacutec của caacutec phương thức khaacutec Vigrave vậy
chuacuteng ta cần nghiecircn cứu kỹ phương thức nagravey để từ đoacute dễ dagraveng hiểu được caacutec phương thức cograven
lại Cuacute phaacutep của $ajax(options) như sau
ltscriptgt $ajax( url --địa chỉ server (trang cần tương taacutec) data --dữ liệu truyền đecircn server success function (response) --hagravem xử lyacute kết quả phản hồi từ server type --phương thức truyền dữ liệu lecircn server GET POST PUT DELETE dataType --kiểu của dữ liệu nhận từ server text xml json javascript ) ltscriptgt
Viacute dụ sau lagrave tương taacutec với action Search() của AjaxController vagrave truyền caacutec tham số Min Max
cho action Kết quả phản hồi từ server sẽ được thocircng baacuteo bằng hộp thoại alert
ltscriptgt $ajax( url AjaxSearch data Min 5 Max 10 success function (response) alert(response) ) ltscriptgt
Xử lyacute kết quả phản hồi từ server phụ thuộc hoagraven toagraven vagraveo kiểu dữ liệu phản hồi lagrave text html
json hay javascript Sau đacircy lagrave caacutec viacute dụ cơ sở về nhận vagrave xử lyacute caacutec loại dữ liệu nagravey
Viacute dụ 1 Lấy giờ trecircn server cứ 1 giacircy lấy giờ 1 lần
Nội dung controller AjaxController
public class AjaxController Controller GET Ajax public ActionResult Index() return View()
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 220 Version 11 ndash 032019
GET AjaxServerTime public ActionResult ServerTime() var text = DateTimeNowToString(HHmmss tt) return Content(text)
Nội dung view Indexcshtml
ViewData[Title] = Index Layout = ~ViewsShared_Layoutcshtml lth2gtIndexlth2gt lth2 id=clockgtClocklth2gt section scripts ltscriptgt $(function () setInterval(function () $ajax( url AjaxServerTime success function (response) $(h2clock)html(response) ) ) 1000) ltscriptgt
Viacute dụ 2 Tigravem kiếm hagraveng hoacutea ajax
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 221
Người dugraveng gotilde từ cần tigravem dữ liệu sẽ được cập nhật tương ứng
Nội dung controller AjaxController
public class AjaxController Controller MyStoreContext db = new MyStoreContext() public IActionResult Index() return View() GET AjaxJsonSearchName= public ActionResult JsonSearch(String Name = ) var model = dbProducts Where(p =gt pNameContains(Name)) Select(p =gt new Name = pName Price = pUnitPrice ) return Json(model)
Action JsonSearch() trả về kết quả dạng JSON chứa thocircng tin mảng caacutec đối tượng coacute 2 thagravenh
phần Name vagrave Price
Trong phần view của action Index() sẽ coacute pheacutep duyệt mảng json nagravey trong jquery lagrave sử dụng
hagravem each(function(i e))
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 222 Version 11 ndash 032019
Trong đoacute i lagrave vị triacute của đổi tượng hiện tại cograven e lagrave đối tượng hiện tại Việc lagravem của chuacuteng ta lagrave lấy
thocircng tin từ e để tạo một lttrgtlttdgttecircnlttdgtlttdgtgiaacutelttdgtlttrgt vagrave bổ sung thẻ nagravey vagraveo
lttbodygt của bảng
Nội dung view Indexcshtml
ViewData[Title] = Ajax Search Layout = ~ViewsShared_Layoutcshtml lth2gtAjax Searchlth2gt ltbr gt ltinput id=search placeholder=Search class=form-control gt ltbr gt lttable class=table table-hovergt lttheadgt lttrgt ltthgtNameltthgt ltthgtPriceltthgt lttrgt lttheadgt lttbody id=resultgtlttbodygt lttablegt section scripts ltscriptgt $(function () $(search)keyup(function () var search = $(search)val() $ajax( url AjaxJsonSearch data Name search success function (response) $(tbodyresult)html() xoacutea nội dung tboly $(response)each(function (i e) duyệt mảng đối tượng var tr = $(lttr gt) tạo lttrgt $(lttd gt)html(ename)appendTo(tr) bổ sung lttdgt vagraveo lttrgt $(lttd gt)html(eprice)appendTo(tr) bổ sung lttdgt vagraveo lttrgt trappendTo(tbodyresult) bổ sung lttrgt vagraveo lttbodygt ) ) ) ) ltscriptgt
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 223
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 224 Version 11 ndash 032019
Web API
111 Giới thiệu về ASPNET Core Web API API lagrave viết tắt của Application Programming Interface (giao diện lập trigravenh ứng dụng) phương
thức kết nối với caacutec thư viện vagrave ứng dụng khaacutec Windows coacute nhiều API vagrave Twitter cũng coacute web
API tuy nhiecircn chuacuteng thực hiện caacutec chức năng khaacutec nhau với mục tiecircu khaacutec nhau Noacute chiacutenh lagrave
một phần mềm giao tiếp được sử dụng bởi caacutec ứng dụng khaacutec nhau Noacute cũng giống như bagraven
phiacutem lagrave thiết bị dugraveng để giao tiếp giữa người sử dụng vagrave maacutey tiacutenh API lagrave một phần mềm giao
tiếp giữa chương trigravenh vagrave hệ điều hagravenh
API cung cấp khả năng cung cấp khả năng truy xuất đến một tập caacutec hagravem hay dugraveng
Web API lagrave một trong những cocircng nghệ mới của Microsoft dugraveng để xacircy dựng dịch vụ thagravenh
phần phacircn taacuten Web API lagrave mocirc higravenh dugraveng để hỗ trợ MVC bao gồm Routing Controller Action
Result Filter loC Container Model binder Unit Test Injection Becircn cạnh đoacute noacute cograven hỗ trợ restful
đầy đủ caacutec phương thức GETPOSTPUTDELETE dữ liệu
Những điểm nổi bật của API
bull Đacircy lagrave một trong những framework mới sẽ giuacutep iacutet cho bạn trong việc xacircy dựng caacutec HTTP
service một caacutech rất đơn giản vagrave nhanh choacuteng
bull Matilde nguồn mở necircn bạn coacute thể được sử dụng bởi bất kigrave một client nagraveo hỗ trợ XML JSON
Sau khi học xong bagravei nagravey học viecircn coacute khả năng
- Trigravenh bagravey được kiến truacutec vagrave vai trograve Web API trong ứng dụng thương mại điện tử
- Phaacutet triển được ứng dụng Client-Server sử dụng WebAPI
- Thực hiện được mocirc higravenh bất đồng bộ sử dụng Web API
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 225
bull Noacute cũng coacute khả năng hỗ trợ đầy đủ caacutec thagravenh phần HTTP URI requestresponse headers
caching versioning content forma
bull Bạn coacute thể sử dụng caacutec host nằm trong phần ứng dụng hoặc trecircn IIS
bull Một kiểu kiến truacutec vocirc cugraveng phugrave hợp dagravenh cho caacutec thiết bị trang bị băng thocircng giới hạn
như smartphone tablet
bull Thường noacute coacute định dạng dữ liệu lagrave JSON XML hoặc một kiểu dữ liệu bất kỳ
Ưu điểm
bull Cấu higravenh đơn giản khi được so saacutenh với WCF
bull Khả năng trigravenh diễn cao
bull Hỗ trợ chức năng RESTful một caacutech đầy đủ
bull Hỗ trợ đầy đủ caacutec thagravenh phần MVC như routing controller action result filter model
binder IoC container dependency injection unit test
bull Matilde nguồn mở
112 Caacutec loại API Action
Higravenh 11-1 Caacutec loại Web API action verb
HTTP verb lagrave một thagravenh phần của request gọi từ client tới server để yecircu cầu server thực
hiện một việc gigrave đoacute như lagrave lấy dữ liệu từ server về gửi dữ liệu lecircn server để xử lyacute cập
nhật hoặc xoacutea dữ liệu trecircn serverhellip
Sử dụng caacutec phương thức theo chuẩn RESTful
Để caacutec web api tuacircn thủ theo chuẩn restful chuacuteng ta cần sử dụng đuacuteng caacutec HTTP verb
tương ứng với yacute nghĩa của chuacuteng Đơn giản coacute thể hiểu từng HTTP verb tương ứng với
một thuật ngữ rất quen thuộc với chuacuteng ta đoacute lagrave CRUD viết tắt của
bull POST ndash Create Tạo dữ liệu mới
bull GET ndash Read Lấy dữ liệu về
bull PUT ndash Update Cập nhật dữ liệu
bull DELETE ndash Delete Xoacutea dữ liệu
Trong 4 HTTP verb trecircn mặc dugrave POST coacute thể thực hiện tất cả caacutec action nhưng với
RESTful service thigrave cần sử dụng tất cả caacutec verb trecircn bởi vigrave
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 226 Version 11 ndash 032019
bull 3 verb (GET PUT DELETE) được gọi lagrave caacutec phương thức khocircng thay đổi giaacute trị
(idempotent) tức lagrave bạn coacute thể gọi GETPUTDELETE nhiều lần cũng khocircng coacute lỗi
hay gacircy bất kỳ ảnh hưởng nagraveo đến ứng dụng
bull Nhưng POST lại lagrave một phương thức lagravem thay đổi giaacute trị tức lagrave nếu gọi POST nhiều
lần thigrave sẽ tạo ra nhiều dữ liệu giống nhau
113 Xacircy dựng Web API với Entity Framework
1131 Xacircy dựng API dugraveng data local
Bagravei nagravey hướng dẫn tạo caacutec API như sau
API Description Request body Response body
GET apitodo Get all to-do items None Array of to-do items
GET apitodoid Get an item by ID None To-do item
POST apitodo Add a new item To-do item To-do item
PUT apitodoid Update an existing item
To-do item None
DELETE apitodoid Delete an item None None
Sơ đồ hoạt động của ứng dụng
Để chuẩn bị nguồn dữ liệu bạn tạo model TodoItem như sau
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 227
public class TodoItem public long Id get set public string Name get set public bool IsComplete get set
Xacircy dựng data Context public class TodoContext DbContext public TodoContext(DbContextOptionsltTodoContextgt options) base(options) public DbSetltTodoItemgt TodoItems get set
Đăng kyacute DbContext ở StartUp public void ConfigureServices(IServiceCollection services) servicesAddDbContextltTodoContextgt(opt =gt optUseInMemoryDatabase(TodoList)) servicesAddMvc()
Tạo mới TodoAPI controller
Bổ sung hagravem tạo [Produces(applicationjson)] [Route(apiTodo)] public class TodoController Controller private readonly TodoContext _context public TodoController(TodoContext context) _context = context if (_contextTodoItemsCount() == 0) _contextTodoItemsAdd(new TodoItem Name = Item1 ) _contextTodoItemsAdd(new TodoItem Name = Item2 ) _contextSaveChanges()
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 228 Version 11 ndash 032019
Định nghĩa phương thức HTTP GET dugraveng để lấy 1 vagrave nhiều TodoItem [HttpGet] public ListltTodoItemgt GetAll() return _contextTodoItemsToList() [HttpGet(id Name = GetTodo)] public IActionResult GetById(long id) var item = _contextTodoItemsFind(id) if (item == null) return NotFound() return Ok(item)
Truy xuất dữ liệu 2 phương thức GET bull GET apitodo bull GET apitodoid
Để yacute route name lagrave GetAll() dagravenh cho tất cả GetltItemgt() dagravenh cho việc lấy một Item cụ thể Nếu tecircn action khaacutec với tecircn mặc định buộc phải khai baacuteo chỉ định [HttpGet(id Name = GetTodo)] trước action đoacute
Cagravei đặt thecircm caacutec phương thức Create() Update() Delete() cho API controller [HttpPost] public IActionResult Create([FromBody] TodoItem item) if (item == null) return BadRequest() _contextTodoItemsAdd(item) _contextSaveChanges()
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 229
return CreatedAtRoute(GetTodo new id = itemId item)
Sau khi thecircm (Create) xong sẽ chuyển đến GET để hiển thị thocircng tin vừa thecircm apiTodoltidgt Phương thức Cập nhật (Update) [HttpPut(id)] public IActionResult Update(long id [FromBody] TodoItem item) if (item == null || itemId = id) return BadRequest() var todo = _contextTodoItemsFind(id) if (todo == null) return NotFound() todoIsComplete = itemIsComplete todoName = itemName _contextTodoItemsUpdate(todo) _contextSaveChanges() return NoContent()
Phương thức Xoacutea (Delete) [HttpDelete(id)] public IActionResult Delete(long id) var todo = _contextTodoItemsFind(id) if (todo == null) return NotFound() _contextTodoItemsRemove(todo) _contextSaveChanges() return NoContent()
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 230 Version 11 ndash 032019
Thử nghiệm gọi API bằng POSTMAN Thử nghiệm GET
Higravenh 11-2 Thử nghiệm POSTMAN với GET N
Higravenh 11-3 Thử nghiệm POSTMAN với GET 1
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 231
Thử nghiệm POST
Higravenh 11-4 Thử nghiệm POSTMAN với POST action
Kết quả quaacute trigravenh chạy
Higravenh 11-5 Kết quả chạy POSTMAN POST action
Sau khi chạy xong test GET lại
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 232 Version 11 ndash 032019
Sử dụng POSTMAN cho phương thức PUT ndash cập nhật
Higravenh 11-6 Sử dụng POSTMAN với PUT action
Sử dụng POSTMAN cho phương thức DELETE
Higravenh 11-7 Sử dụng POSTMAN với DELETE action
Xacircy dựng trang web tĩnh gọi API Tạo trang apihtml trong wwwroot với nội dung sau
ltDOCTYPE htmlgt lthtmlgt ltheadgt ltmeta charset=utf-8 gt lttitlegtTo-do CRUDlttitlegt ltheadgt ltbodygt lth1gtTo-do CRUDlth1gt lth3gtAddlth3gt ltform action=javascriptvoid(0) method=POST onsubmit=addItem()gt ltinput type=text id=add-name placeholder=New to-dogt ltinput type=submit value=Addgt ltformgt ltdiv id=spoilergt lth3gtEditlth3gt ltform class=my-formgt ltinput type=hidden id=edit-idgt ltinput type=checkbox id=edit-isCompletegt
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 233
ltinput type=text id=edit-namegt ltinput type=submit value=Editgt lta onclick=closeInput() aria-label=Closegtamp10006ltagt ltformgt ltdivgt ltp id=countergtltpgt lttablegt lttrgt ltthgtIs Completeltthgt ltthgtNameltthgt ltthgtltthgt ltthgtltthgt lttrgt lttbody id=todosgtlttbodygt lttablegt ltscript src=httpscodejquerycomjquery-331minjs integrity=sha256-FgpCbKJQlLNfOu91ta32oNMZxltwRo8QtmkMRdAu8= crossorigin=anonymousgtltscriptgt ltscript src=jssitejsgtltscriptgt ltbodygt lthtmlgt
Mở file sitejs định nghĩa caacutec sự kiện
const uri = apitodo let todos = null function getCount(data) const el = $(counter) let name = to-do if (data) if (data gt 1) name = to-dos eltext(data + + name) else elhtml(No + name) $(document)ready(function () getData() ) function getData() $ajax( type GET url uri success function (data) $(todos)empty() getCount(datalength) $each(data function (key item) const checked = itemisComplete checked
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 234 Version 11 ndash 032019
$(lttrgtlttdgtltinput disabled=true type=checkbox + checked + gtlttdgt + lttdgt + itemname + lttdgt + lttdgtltbutton onclick=editItem( + itemid + )gtEditltbuttongtlttdgt + lttdgtltbutton onclick=deleteItem( + itemid + )gtDeleteltbuttongtlttdgt + lttrgt)appendTo($(todos)) ) todos = data ) function addItem() const item = name $(add-name)val() isComplete false $ajax( type POST accepts applicationjson url uri contentType applicationjson data JSONstringify(item) error function (jqXHR textStatus errorThrown) alert(here) success function (result) getData() $(add-name)val() ) function deleteItem(id) $ajax( url uri + + id type DELETE success function (result) getData() ) function editItem(id) $each(todos function (key item) if (itemid === id) $(edit-name)val(itemname) $(edit-id)val(itemid)
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 235
$(edit-isComplete)val(itemisComplete) ) $(spoiler)css( display block ) $(my-form)on(submit function () const item = name $(edit-name)val() isComplete $(edit-isComplete)is(checked) id $(edit-id)val() $ajax( url uri + + $(edit-id)val() type PUT accepts applicationjson contentType applicationjson data JSONstringify(item) success function (result) getData() ) closeInput() return false ) function closeInput() $(spoiler)css( display none )
bull Hagravem addItem() tiến hagravenh tạo mới TodoItem gửi lecircn server theo phương thức POST
kiểu JSON bull Hagravem getData() để lấy toagraven bộ caacutec TodoItem sau đoacute duyệt qua từng phần tử để thecircm
vagraveo bảng bull Hagravem deleteItem() tiến hagravenh xoacutea một TodoItem cụ thể gửi lecircn server theo phương thức
DELETE vagrave cập nhật lại danh saacutech caacutec TodoItem
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 236 Version 11 ndash 032019
Một số magraven higravenh thể hiện
1132 Xacircy dựng API dugraveng EF kết nối SQL Server Tạo Controller dạng API sử dụng Entity Framework
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 237
Chọn Model class vagrave DataContext class tương ứng
Matilde nguồn controller code sinh ra
[Produces(applicationjson)] [Route(apiProducts)] public class ProductsController Controller private readonly MyStoreContext _context public ProductsController(MyStoreContext context) _context = context GET apiProducts [HttpGet] public IEnumerableltProductsgt GetProducts() return _contextProducts GET apiProducts5 [HttpGet(id)] public async TaskltIActionResultgt GetProducts([FromRoute] int id) if (ModelStateIsValid) return BadRequest(ModelState) var products = await _contextProductsSingleOrDefaultAsync(m =gt mId == id) if (products == null) return NotFound() return Ok(products)
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 238 Version 11 ndash 032019
PUT apiProducts5 [HttpPut(id)] public async TaskltIActionResultgt PutProducts([FromRoute] int id [FromBody] Products products) if (ModelStateIsValid) return BadRequest(ModelState) if (id = productsId) return BadRequest() _contextEntry(products)State = EntityStateModified try await _contextSaveChangesAsync() catch (DbUpdateConcurrencyException) if (ProductsExists(id)) return NotFound() else throw return NoContent() POST apiProducts [HttpPost] public async TaskltIActionResultgt PostProducts([FromBody] Products products) if (ModelStateIsValid) return BadRequest(ModelState) _contextProductsAdd(products) await _contextSaveChangesAsync() return CreatedAtAction(GetProducts new id = productsId products)
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 239
DELETE apiProducts5 [HttpDelete(id)] public async TaskltIActionResultgt DeleteProducts([FromRoute] int id) if (ModelStateIsValid) return BadRequest(ModelState) var products = await _contextProductsSingleOrDefaultAsync(m =gt mId == id) if (products == null) return NotFound() _contextProductsRemove(products) await _contextSaveChangesAsync() return Ok(products) private bool ProductsExists(int id) return _contextProductsAny(e =gt eId == id)
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 240 Version 11 ndash 032019
Bảo mật
121 Identity ASPNET Core Identity lagrave một thagravenh phần (built-in) của ASPNET Core cung cấp caacutec tiacutenh năng
đầy đủ vagrave đa dạng về authentication Bao gồm Tạo tagravei khoản login với username vagrave password
cập nhật profile quản lyacute vai trograve (Role) người dugraven Ngoagravei ra noacute hỗ trợ xaacutec thực nhiều lớp đăng
nhập bằng mạng xatilde hội với Google Facebook cũng như kết nối tới dịch vị OAuth 20 vagrave OpenID
Bạn coacute thể cấu higravenh ASPNET Core để sử dụng với SQL Server nhằm lưu trữ username password
vagrave dữ liệu profile
122 Authentication Để dễ hiểu trước hết chuacuteng ta tigravem hiểu caacutec chức năng security sự hỗ trợ sẵn trong MVC sau đoacute
chuacuteng ta sẽ tigravem hiểu sacircu hơn
1221 Tạo dự aacuten coacute hỗ trợ security Để tận dụng caacutec chức năng security được hỗ trợ sẵn luacutec tạo dự aacuten bạn phải chọn Individual
User Accounts
Higravenh 12-1 Magraven higravenh chọn loại security
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 241
Higravenh 12-2 Caacutec loại security
Loại Mocirc tả
No Authentication Ứng dụng khocircng hỗ trợ Security
Individual User Accounts Ứng dụng sử dụng tagravei khoản được quản lyacute bởi
SQL Server hoặc từ gmail facebookhellip
Work or School Accounts Ứng dụng sử dụng tagravei khoản được cung cấp
cho tổ chức hoặc trường học
Windows Authentication Ứng dụng chạy trecircn intranet tức sử dụng tagravei
khoản windows để đăng nhập
Mỗi thể loại security khaacutec nhau sẽ phugrave hợp với caacutec ứng dụng khaacutec nhau Trong trường hợp nagravey
chuacuteng ta chọn Individual User Accounts vigrave ứng dụng của chuacuteng ta chạy trecircn Internet vagrave sử dụng
SQL Server để lưu trữ thagravenh viecircn hoặc đăng nhập từ caacutec hệ thống khaacutec như gmail facebookhellip
Sau khi dự aacuten loại nagravey được tạo bạn đatilde coacute thể đăng k đăng nhập đổi mật khẩu đăng xuất
với tagravei khoản cục bộ hoặc becircn ngoagravei (gmail facebookhellip)
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 242 Version 11 ndash 032019
Higravenh 12-3 Đăng kyacute Thagravenh viecircn
Higravenh 12-4 Magraven higravenh đăng nhập
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 243
Higravenh 12-5 Đăng nhập thagravenh cocircng
Higravenh 12-6 Magraven higravenh đổi mật khẩu
Một cacircu hỏi lớn lagrave tại sao khi mới tạo dự aacuten đatilde coacute sẵn caacutec chức năng security ở trecircn Đoacute lagrave động
lực giuacutep bạn tigravem hiểu sacircu hơn về điều nagravey của dự aacuten
Sau khi dự aacuten Individual User Accounts được tạo ra thigrave một số thagravenh phần của dự aacuten liecircn quan
đến security đatilde được cagravei đặt matilde sẵn Nhiệm vụ của chuacuteng ta lagrave cần tigravem hiển để nacircng cấp caacutec
thagravenh phần nagravey hoagraven thiện hơn theo yacute riecircng của migravenh đồng thời bổ sung thecircm caacutec thagravenh
phầnchức năng cograven thiếu
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 244 Version 11 ndash 032019
Higravenh 12-7 Cấu truacutec project luacutec tạo với Individual Identity
Muốn custom lại caacutec magraven higravenh chức năng bạn cần right click lecircn mục Area bấm chọn Add
chọn New Scaffolced Item hellip
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 245
Chọn magraven higravenh muốn chỉnh sửa
1222 Cấu higravenh Cookie authentication Nếu người dugraveng chọn loại dự aacuten lagrave No Authentication thigrave phải tự cấu higravenh phần Authentication
12221 Đaacutenh dấu [khocircng] cần Authorize
Để đaacutenh dấu controller hoặc action nagraveo cần authorize thigrave thecircm Annotation [Authorize] phiacutea trước
class hoặc method đoacute Viacute dụ
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 246 Version 11 ndash 032019
namespace DemoSecurityControllers [Authorize] public class CustomerController Controller public IActionResult Index() return View() public IActionResult Logout() return View() public IActionResult Profile() return View()
Để đaacutenh dấu action đoacute được truy xuất ở bất kỳ nơi đacircu cần đaacutenh dấu với annotation
[AllowAnonymous]
[Authorize] public class CustomerController Controller [AllowAnonymous] public IActionResult Login() return View() [HttpPost AllowAnonymous] public IActionResult Login(string username string password) return View()
12222 Cấu higravenh StartUpcs
Trước tiecircn bạn cần tạo service Authentication Middleware trong method ConfigureServices trong
class Startupcs
servicesAddAuthentication(CookieAuthenticationDefaultsAuthenticationScheme)
AddCookie()
AuthenticationCheme được truyền tới method AddAuthentication thiết lập giaacute trị default
authentication scheme cho ứng dụng AuthenticationScheme lagrave hữu iacutech khi coacute nhiều thể hiện của
cookie authentication vagrave bạn muốn xaacutec thực với một scheme nhất định Thiết lập
AuthenticationScheme với enum CookieAuthenticationDefaultsAuthenticationScheme cung cấp
một giaacute trị của Cookies cho scheme Bạn coacute thể cung cấp bất kigrave giaacute trị string nagraveo cho scheme Coacute
rất nhiều option khaacutec magrave coacute thể sử dụng trong caacutec trường hợp cụ thể bạn coacute thể tham khảo đầy
đủ tại đacircy CookieAuthenticationOptions
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
LƯƠNG TRẦN HY HIẾN ndash ASPNET Core 22 Trang 247
Trong method Configure sử dụng method UserAuthentication để triệu gọi Authentication
Middleware Lưu yacute cần gọi phương thức nagravey trước khi gọi UseMvcWithDefaultRoute hoặc UseMvc
appUseAuthentication()
12223 Hagravem xử lyacute login Giả sử đatilde định nghĩa model login đơn giản dung kiểm tra vagrave hiển thị view như sau
public class LoginViewModel public string Username get set public string Password get set public string RequestPath get set
Để tạo một cookie nắm giữ thocircng tin người dugraveng bạn phải xacircy dựng một ClaimsPrincipal Thocircng tin người dugraveng được serialized vagrave lưu trữ trong cookie Sau đoacute caacutec bạn sẽ gọi SignInAsync để thực hiện login với thiết lập scheme đatilde được cấu higravenh tại Startup principal vagrave option cho việc lưu trữ cookie [HttpPost] public async TaskltIActionResultgt Login(LoginViewModel model) if (IsAuthenticated(modelUsername modelPassword)) return View() create claims ListltClaimgt claims = new ListltClaimgt new Claim(ClaimTypesName Cookie authentication demo) new Claim(ClaimTypesEmail modelUsername) create identity ClaimsIdentity identity = new ClaimsIdentity(claims cookie) create principal ClaimsPrincipal principal = new ClaimsPrincipal(identity) sign-in await HttpContextSignInAsync( scheme DemoSecuritySchemeNN principal principal properties new AuthenticationProperties() ) return Redirect(modelRequestPath ) private bool IsAuthenticated(string username string password) check in database
TRUNG TAcircM ĐAgraveO TẠO CNTT NHẤT NGHỆ ĐỐI TAacuteC ĐAgraveO TẠO CỦA MICROSOFT TẠI VIỆT NAM
105 Bagrave Huyện Thanh Quan Q3 TP HCM
Tel 39322735 ndash 0913735906 Fax 39322734 wwwnhatnghecom
Trang 248 Version 11 ndash 032019
return (username == nhatnghe ampamp password == NhtNgh3)
12224 Hagravem xử lyacute logout
Sử dụng hagravem SignOutAsync của HttpContext với đuacuteng scheme name đatilde cấu higravenh trước đoacute vagrave
đồng thời xoacutea cookie của người dugraveng
public async TaskltIActionResultgt Logout(string requestPath) await HttpContextSignOutAsync(scheme DemoSecuritySchemeNN) return RedirectToAction(Login)
12225 Kiểm traLấy thocircng tin đăng nhập trecircn View
Ở View để kiểm tra đatilde đăng nhập chưa dugraveng thuộc tiacutenh UserIdentityIsAuthenticated vagrave lấy
thocircng tin đăng nhập dugraveng UserIdentityName