261

T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂ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 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

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 249

UPLOAD FILE LEcircN HOST _ Caacutec bước thực hiện

Bước 1 Truy cập trang httpssomeecom chọn mục Free Net hosting Sau đoacute

click vagraveo Learn more

Bước 2 Click vagraveo Order now

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 250 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 251

Bước 3 Điền thocircng tin để đăng kyacute tagravei khoản nếu chưa coacute tagravei khoản Hoặc đăng nhập

nếu đatilde coacute tagravei khoản

Điền matilde code xaacutec nhận

Bước 4 Click chọn Checkout

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 252 Version 11 ndash 032019

Bước 5 Đặt tecircn Site name vagrave click Create website

Kết quả đăng kyacute hosting thagravenh cocircng

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 253

Bước 6 Chọn mục Database Sau đoacute đặt tecircn database chọn phiecircn bản SQL vagrave click

Create empty 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 254 Version 11 ndash 032019

Bước 7 Restore database

Bước 8 Sửa đoạn code sau ở appsettingsjson

ConnectionStrings MyStore Server= Database=MyStore Integrated Security=SSPI Logging IncludeScopes false LogLevel Default Warning

Thagravenh

ConnectionStrings MyStore Server= Database=MyStore Integrated Security=SSPI Logging IncludeScopes false LogLevel Default Warning

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 255

Lưu yacute đoạn code được bocirci vagraveng lấy từ

Bước 9 Upload file lecircn host

Dugraveng chương trigravenh Total Commander

Điền thocircng tin

Host name địa chỉ IP hoặc tecircn domain

User name user name magrave domain đatilde cấp cho migravenh

Password password magrave domain đatilde cấp cho 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 256 Version 11 ndash 032019

Keacuteo những trang những thư mục qua host

Bước 10 Truy cập vagraveo host vừa đăng kyacute để kiểm tra

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 257

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 258 Version 11 ndash 032019

Thực hiện dự aacuten

Kết thuacutec khoacutea học bằng việc thực hiện một dự aacuten website baacuten hagraveng Bạn sẽ cugraveng giảng viecircn thực

hiện từng bước để hoagraven thagravenh website nagravey

Thực ra cocircng việc lagravem dự aacuten của khoacutea học mang một số yacute nghĩa lớn lagrave

Hệ thống caacutec bước thực hiện từ bắt đầu cho đến kết thuacutec

Củng cố lại kiến thức đatilde học trong quaacute trigravenh của mocircn Với website nagravey bạn sẽ được ocircn

tập vagrave vận dụng phần lyacute thuyết cơ sở đatilde học để củng cố vững chắc kiến thức

Xacircy dựng một thư viện kỹ thuật lập trigravenh để tra cứu khi cần thiết

CAacuteC COcircNG VIỆC CẦN LAgraveM

minus Phacircn tiacutech chức năng CSDL

minus Xacircy dựng layout trang chủ module hoacutea thagravenh phần giao diện minus Xacircy dựng EF Code First minus Xacircy dựng Trang chủ minus Xacircy dựng Trang hagraveng hoacutea

o Lọc phacircn loại hagraveng hoacutea o Phacircn trang hagraveng hoacutea với ajax o Tải bổ sung hagraveng hoacutea với ajax (lazy loading)

minus Xacircy dựng Trang chi tiết hagraveng hoacutea o Thocircng tin chi tiết o Hagraveng cugraveng loại o Hagraveng cugraveng nhagrave cung cấp o Hagraveng đatilde xem

minus Quản lyacute Thagravenh viecircn o Đăng kyacute o Đăng nhậpĐăng xuất o Quecircn mật khẩu o Quản lyacute tagravei khoản o Quản lyacute đơn hagraveng

minus Xử lyacute Giỏ hagraveng vagrave Thanh toaacuten o Chọn hagraveng hoacutea o Quản lyacute (thecircmxoacuteasửa) giỏ hagraveng o Đặt hagraveng o Thanh toaacuten kết nối với ngacircn hagraveng (ảo)

minus Phần Admin - Quản lyacute thecircm xoacutea sửa Hagraveng hoacutea minus Phần Admin - Quản lyacute thecircm xoacutea sửa Hoacutea đơn minus Phần Admin ndash Quản lyacute thecircm xoacutea sửa Khaacutech hagraveng minus Phần Admin ndash Quản lyacute Doanh thu minus Phần Admin ndash Quản lyacute tagravei khoản người dugraveng Vai trograve (Role) Phacircn quyecircn minus Phần Admin ndash Thống kecirc

o Hagraveng tồn kho o Doanh số từng mặt hagraveng o Doanh số theo nhagrave cung cấpkhaacutech hagraveng o Doanh số từng thaacutengquyacutenăm

minus Phần Admin ndash Rewrite URL trong ASPNET CoreSEO

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 259

TAgraveI LIỆU THAM KHẢO

Freeman A (2017) Pro ASPNET Core MVC 2 Apress

Joseph A amp Ben A (2018) C 70 in a Nutshell OReilly

Philip J Kevin G amp Ben D (2017) Building Web Applications with Visual Studio

2017 Apress

Rouleau D J (2018) Beginning Entity Framework Core 20 Apress

Smith S (2017) Architecting Modern Web Applications with ASPNET Core and

Microsoft Azure Microsoft Corporation

httpsdotnetgithubio

httpsdocsmicrosoftcomen-usaspnetcore

httpsdocsmicrosoftcomen-usefcore

Page 2: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂ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 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

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 249

UPLOAD FILE LEcircN HOST _ Caacutec bước thực hiện

Bước 1 Truy cập trang httpssomeecom chọn mục Free Net hosting Sau đoacute

click vagraveo Learn more

Bước 2 Click vagraveo Order now

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 250 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 251

Bước 3 Điền thocircng tin để đăng kyacute tagravei khoản nếu chưa coacute tagravei khoản Hoặc đăng nhập

nếu đatilde coacute tagravei khoản

Điền matilde code xaacutec nhận

Bước 4 Click chọn Checkout

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 252 Version 11 ndash 032019

Bước 5 Đặt tecircn Site name vagrave click Create website

Kết quả đăng kyacute hosting thagravenh cocircng

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 253

Bước 6 Chọn mục Database Sau đoacute đặt tecircn database chọn phiecircn bản SQL vagrave click

Create empty 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 254 Version 11 ndash 032019

Bước 7 Restore database

Bước 8 Sửa đoạn code sau ở appsettingsjson

ConnectionStrings MyStore Server= Database=MyStore Integrated Security=SSPI Logging IncludeScopes false LogLevel Default Warning

Thagravenh

ConnectionStrings MyStore Server= Database=MyStore Integrated Security=SSPI Logging IncludeScopes false LogLevel Default Warning

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 255

Lưu yacute đoạn code được bocirci vagraveng lấy từ

Bước 9 Upload file lecircn host

Dugraveng chương trigravenh Total Commander

Điền thocircng tin

Host name địa chỉ IP hoặc tecircn domain

User name user name magrave domain đatilde cấp cho migravenh

Password password magrave domain đatilde cấp cho 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 256 Version 11 ndash 032019

Keacuteo những trang những thư mục qua host

Bước 10 Truy cập vagraveo host vừa đăng kyacute để kiểm tra

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 257

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 258 Version 11 ndash 032019

Thực hiện dự aacuten

Kết thuacutec khoacutea học bằng việc thực hiện một dự aacuten website baacuten hagraveng Bạn sẽ cugraveng giảng viecircn thực

hiện từng bước để hoagraven thagravenh website nagravey

Thực ra cocircng việc lagravem dự aacuten của khoacutea học mang một số yacute nghĩa lớn lagrave

Hệ thống caacutec bước thực hiện từ bắt đầu cho đến kết thuacutec

Củng cố lại kiến thức đatilde học trong quaacute trigravenh của mocircn Với website nagravey bạn sẽ được ocircn

tập vagrave vận dụng phần lyacute thuyết cơ sở đatilde học để củng cố vững chắc kiến thức

Xacircy dựng một thư viện kỹ thuật lập trigravenh để tra cứu khi cần thiết

CAacuteC COcircNG VIỆC CẦN LAgraveM

minus Phacircn tiacutech chức năng CSDL

minus Xacircy dựng layout trang chủ module hoacutea thagravenh phần giao diện minus Xacircy dựng EF Code First minus Xacircy dựng Trang chủ minus Xacircy dựng Trang hagraveng hoacutea

o Lọc phacircn loại hagraveng hoacutea o Phacircn trang hagraveng hoacutea với ajax o Tải bổ sung hagraveng hoacutea với ajax (lazy loading)

minus Xacircy dựng Trang chi tiết hagraveng hoacutea o Thocircng tin chi tiết o Hagraveng cugraveng loại o Hagraveng cugraveng nhagrave cung cấp o Hagraveng đatilde xem

minus Quản lyacute Thagravenh viecircn o Đăng kyacute o Đăng nhậpĐăng xuất o Quecircn mật khẩu o Quản lyacute tagravei khoản o Quản lyacute đơn hagraveng

minus Xử lyacute Giỏ hagraveng vagrave Thanh toaacuten o Chọn hagraveng hoacutea o Quản lyacute (thecircmxoacuteasửa) giỏ hagraveng o Đặt hagraveng o Thanh toaacuten kết nối với ngacircn hagraveng (ảo)

minus Phần Admin - Quản lyacute thecircm xoacutea sửa Hagraveng hoacutea minus Phần Admin - Quản lyacute thecircm xoacutea sửa Hoacutea đơn minus Phần Admin ndash Quản lyacute thecircm xoacutea sửa Khaacutech hagraveng minus Phần Admin ndash Quản lyacute Doanh thu minus Phần Admin ndash Quản lyacute tagravei khoản người dugraveng Vai trograve (Role) Phacircn quyecircn minus Phần Admin ndash Thống kecirc

o Hagraveng tồn kho o Doanh số từng mặt hagraveng o Doanh số theo nhagrave cung cấpkhaacutech hagraveng o Doanh số từng thaacutengquyacutenăm

minus Phần Admin ndash Rewrite URL trong ASPNET CoreSEO

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 259

TAgraveI LIỆU THAM KHẢO

Freeman A (2017) Pro ASPNET Core MVC 2 Apress

Joseph A amp Ben A (2018) C 70 in a Nutshell OReilly

Philip J Kevin G amp Ben D (2017) Building Web Applications with Visual Studio

2017 Apress

Rouleau D J (2018) Beginning Entity Framework Core 20 Apress

Smith S (2017) Architecting Modern Web Applications with ASPNET Core and

Microsoft Azure Microsoft Corporation

httpsdotnetgithubio

httpsdocsmicrosoftcomen-usaspnetcore

httpsdocsmicrosoftcomen-usefcore

Page 3: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂ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 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

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 249

UPLOAD FILE LEcircN HOST _ Caacutec bước thực hiện

Bước 1 Truy cập trang httpssomeecom chọn mục Free Net hosting Sau đoacute

click vagraveo Learn more

Bước 2 Click vagraveo Order now

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 250 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 251

Bước 3 Điền thocircng tin để đăng kyacute tagravei khoản nếu chưa coacute tagravei khoản Hoặc đăng nhập

nếu đatilde coacute tagravei khoản

Điền matilde code xaacutec nhận

Bước 4 Click chọn Checkout

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 252 Version 11 ndash 032019

Bước 5 Đặt tecircn Site name vagrave click Create website

Kết quả đăng kyacute hosting thagravenh cocircng

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 253

Bước 6 Chọn mục Database Sau đoacute đặt tecircn database chọn phiecircn bản SQL vagrave click

Create empty 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 254 Version 11 ndash 032019

Bước 7 Restore database

Bước 8 Sửa đoạn code sau ở appsettingsjson

ConnectionStrings MyStore Server= Database=MyStore Integrated Security=SSPI Logging IncludeScopes false LogLevel Default Warning

Thagravenh

ConnectionStrings MyStore Server= Database=MyStore Integrated Security=SSPI Logging IncludeScopes false LogLevel Default Warning

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 255

Lưu yacute đoạn code được bocirci vagraveng lấy từ

Bước 9 Upload file lecircn host

Dugraveng chương trigravenh Total Commander

Điền thocircng tin

Host name địa chỉ IP hoặc tecircn domain

User name user name magrave domain đatilde cấp cho migravenh

Password password magrave domain đatilde cấp cho 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 256 Version 11 ndash 032019

Keacuteo những trang những thư mục qua host

Bước 10 Truy cập vagraveo host vừa đăng kyacute để kiểm tra

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 257

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 258 Version 11 ndash 032019

Thực hiện dự aacuten

Kết thuacutec khoacutea học bằng việc thực hiện một dự aacuten website baacuten hagraveng Bạn sẽ cugraveng giảng viecircn thực

hiện từng bước để hoagraven thagravenh website nagravey

Thực ra cocircng việc lagravem dự aacuten của khoacutea học mang một số yacute nghĩa lớn lagrave

Hệ thống caacutec bước thực hiện từ bắt đầu cho đến kết thuacutec

Củng cố lại kiến thức đatilde học trong quaacute trigravenh của mocircn Với website nagravey bạn sẽ được ocircn

tập vagrave vận dụng phần lyacute thuyết cơ sở đatilde học để củng cố vững chắc kiến thức

Xacircy dựng một thư viện kỹ thuật lập trigravenh để tra cứu khi cần thiết

CAacuteC COcircNG VIỆC CẦN LAgraveM

minus Phacircn tiacutech chức năng CSDL

minus Xacircy dựng layout trang chủ module hoacutea thagravenh phần giao diện minus Xacircy dựng EF Code First minus Xacircy dựng Trang chủ minus Xacircy dựng Trang hagraveng hoacutea

o Lọc phacircn loại hagraveng hoacutea o Phacircn trang hagraveng hoacutea với ajax o Tải bổ sung hagraveng hoacutea với ajax (lazy loading)

minus Xacircy dựng Trang chi tiết hagraveng hoacutea o Thocircng tin chi tiết o Hagraveng cugraveng loại o Hagraveng cugraveng nhagrave cung cấp o Hagraveng đatilde xem

minus Quản lyacute Thagravenh viecircn o Đăng kyacute o Đăng nhậpĐăng xuất o Quecircn mật khẩu o Quản lyacute tagravei khoản o Quản lyacute đơn hagraveng

minus Xử lyacute Giỏ hagraveng vagrave Thanh toaacuten o Chọn hagraveng hoacutea o Quản lyacute (thecircmxoacuteasửa) giỏ hagraveng o Đặt hagraveng o Thanh toaacuten kết nối với ngacircn hagraveng (ảo)

minus Phần Admin - Quản lyacute thecircm xoacutea sửa Hagraveng hoacutea minus Phần Admin - Quản lyacute thecircm xoacutea sửa Hoacutea đơn minus Phần Admin ndash Quản lyacute thecircm xoacutea sửa Khaacutech hagraveng minus Phần Admin ndash Quản lyacute Doanh thu minus Phần Admin ndash Quản lyacute tagravei khoản người dugraveng Vai trograve (Role) Phacircn quyecircn minus Phần Admin ndash Thống kecirc

o Hagraveng tồn kho o Doanh số từng mặt hagraveng o Doanh số theo nhagrave cung cấpkhaacutech hagraveng o Doanh số từng thaacutengquyacutenăm

minus Phần Admin ndash Rewrite URL trong ASPNET CoreSEO

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 259

TAgraveI LIỆU THAM KHẢO

Freeman A (2017) Pro ASPNET Core MVC 2 Apress

Joseph A amp Ben A (2018) C 70 in a Nutshell OReilly

Philip J Kevin G amp Ben D (2017) Building Web Applications with Visual Studio

2017 Apress

Rouleau D J (2018) Beginning Entity Framework Core 20 Apress

Smith S (2017) Architecting Modern Web Applications with ASPNET Core and

Microsoft Azure Microsoft Corporation

httpsdotnetgithubio

httpsdocsmicrosoftcomen-usaspnetcore

httpsdocsmicrosoftcomen-usefcore

Page 4: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂ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 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

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 249

UPLOAD FILE LEcircN HOST _ Caacutec bước thực hiện

Bước 1 Truy cập trang httpssomeecom chọn mục Free Net hosting Sau đoacute

click vagraveo Learn more

Bước 2 Click vagraveo Order now

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 250 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 251

Bước 3 Điền thocircng tin để đăng kyacute tagravei khoản nếu chưa coacute tagravei khoản Hoặc đăng nhập

nếu đatilde coacute tagravei khoản

Điền matilde code xaacutec nhận

Bước 4 Click chọn Checkout

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 252 Version 11 ndash 032019

Bước 5 Đặt tecircn Site name vagrave click Create website

Kết quả đăng kyacute hosting thagravenh cocircng

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 253

Bước 6 Chọn mục Database Sau đoacute đặt tecircn database chọn phiecircn bản SQL vagrave click

Create empty 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 254 Version 11 ndash 032019

Bước 7 Restore database

Bước 8 Sửa đoạn code sau ở appsettingsjson

ConnectionStrings MyStore Server= Database=MyStore Integrated Security=SSPI Logging IncludeScopes false LogLevel Default Warning

Thagravenh

ConnectionStrings MyStore Server= Database=MyStore Integrated Security=SSPI Logging IncludeScopes false LogLevel Default Warning

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 255

Lưu yacute đoạn code được bocirci vagraveng lấy từ

Bước 9 Upload file lecircn host

Dugraveng chương trigravenh Total Commander

Điền thocircng tin

Host name địa chỉ IP hoặc tecircn domain

User name user name magrave domain đatilde cấp cho migravenh

Password password magrave domain đatilde cấp cho 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 256 Version 11 ndash 032019

Keacuteo những trang những thư mục qua host

Bước 10 Truy cập vagraveo host vừa đăng kyacute để kiểm tra

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 257

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 258 Version 11 ndash 032019

Thực hiện dự aacuten

Kết thuacutec khoacutea học bằng việc thực hiện một dự aacuten website baacuten hagraveng Bạn sẽ cugraveng giảng viecircn thực

hiện từng bước để hoagraven thagravenh website nagravey

Thực ra cocircng việc lagravem dự aacuten của khoacutea học mang một số yacute nghĩa lớn lagrave

Hệ thống caacutec bước thực hiện từ bắt đầu cho đến kết thuacutec

Củng cố lại kiến thức đatilde học trong quaacute trigravenh của mocircn Với website nagravey bạn sẽ được ocircn

tập vagrave vận dụng phần lyacute thuyết cơ sở đatilde học để củng cố vững chắc kiến thức

Xacircy dựng một thư viện kỹ thuật lập trigravenh để tra cứu khi cần thiết

CAacuteC COcircNG VIỆC CẦN LAgraveM

minus Phacircn tiacutech chức năng CSDL

minus Xacircy dựng layout trang chủ module hoacutea thagravenh phần giao diện minus Xacircy dựng EF Code First minus Xacircy dựng Trang chủ minus Xacircy dựng Trang hagraveng hoacutea

o Lọc phacircn loại hagraveng hoacutea o Phacircn trang hagraveng hoacutea với ajax o Tải bổ sung hagraveng hoacutea với ajax (lazy loading)

minus Xacircy dựng Trang chi tiết hagraveng hoacutea o Thocircng tin chi tiết o Hagraveng cugraveng loại o Hagraveng cugraveng nhagrave cung cấp o Hagraveng đatilde xem

minus Quản lyacute Thagravenh viecircn o Đăng kyacute o Đăng nhậpĐăng xuất o Quecircn mật khẩu o Quản lyacute tagravei khoản o Quản lyacute đơn hagraveng

minus Xử lyacute Giỏ hagraveng vagrave Thanh toaacuten o Chọn hagraveng hoacutea o Quản lyacute (thecircmxoacuteasửa) giỏ hagraveng o Đặt hagraveng o Thanh toaacuten kết nối với ngacircn hagraveng (ảo)

minus Phần Admin - Quản lyacute thecircm xoacutea sửa Hagraveng hoacutea minus Phần Admin - Quản lyacute thecircm xoacutea sửa Hoacutea đơn minus Phần Admin ndash Quản lyacute thecircm xoacutea sửa Khaacutech hagraveng minus Phần Admin ndash Quản lyacute Doanh thu minus Phần Admin ndash Quản lyacute tagravei khoản người dugraveng Vai trograve (Role) Phacircn quyecircn minus Phần Admin ndash Thống kecirc

o Hagraveng tồn kho o Doanh số từng mặt hagraveng o Doanh số theo nhagrave cung cấpkhaacutech hagraveng o Doanh số từng thaacutengquyacutenăm

minus Phần Admin ndash Rewrite URL trong ASPNET CoreSEO

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 259

TAgraveI LIỆU THAM KHẢO

Freeman A (2017) Pro ASPNET Core MVC 2 Apress

Joseph A amp Ben A (2018) C 70 in a Nutshell OReilly

Philip J Kevin G amp Ben D (2017) Building Web Applications with Visual Studio

2017 Apress

Rouleau D J (2018) Beginning Entity Framework Core 20 Apress

Smith S (2017) Architecting Modern Web Applications with ASPNET Core and

Microsoft Azure Microsoft Corporation

httpsdotnetgithubio

httpsdocsmicrosoftcomen-usaspnetcore

httpsdocsmicrosoftcomen-usefcore

Page 5: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂ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 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

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 249

UPLOAD FILE LEcircN HOST _ Caacutec bước thực hiện

Bước 1 Truy cập trang httpssomeecom chọn mục Free Net hosting Sau đoacute

click vagraveo Learn more

Bước 2 Click vagraveo Order now

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 250 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 251

Bước 3 Điền thocircng tin để đăng kyacute tagravei khoản nếu chưa coacute tagravei khoản Hoặc đăng nhập

nếu đatilde coacute tagravei khoản

Điền matilde code xaacutec nhận

Bước 4 Click chọn Checkout

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 252 Version 11 ndash 032019

Bước 5 Đặt tecircn Site name vagrave click Create website

Kết quả đăng kyacute hosting thagravenh cocircng

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 253

Bước 6 Chọn mục Database Sau đoacute đặt tecircn database chọn phiecircn bản SQL vagrave click

Create empty 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 254 Version 11 ndash 032019

Bước 7 Restore database

Bước 8 Sửa đoạn code sau ở appsettingsjson

ConnectionStrings MyStore Server= Database=MyStore Integrated Security=SSPI Logging IncludeScopes false LogLevel Default Warning

Thagravenh

ConnectionStrings MyStore Server= Database=MyStore Integrated Security=SSPI Logging IncludeScopes false LogLevel Default Warning

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 255

Lưu yacute đoạn code được bocirci vagraveng lấy từ

Bước 9 Upload file lecircn host

Dugraveng chương trigravenh Total Commander

Điền thocircng tin

Host name địa chỉ IP hoặc tecircn domain

User name user name magrave domain đatilde cấp cho migravenh

Password password magrave domain đatilde cấp cho 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 256 Version 11 ndash 032019

Keacuteo những trang những thư mục qua host

Bước 10 Truy cập vagraveo host vừa đăng kyacute để kiểm tra

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 257

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 258 Version 11 ndash 032019

Thực hiện dự aacuten

Kết thuacutec khoacutea học bằng việc thực hiện một dự aacuten website baacuten hagraveng Bạn sẽ cugraveng giảng viecircn thực

hiện từng bước để hoagraven thagravenh website nagravey

Thực ra cocircng việc lagravem dự aacuten của khoacutea học mang một số yacute nghĩa lớn lagrave

Hệ thống caacutec bước thực hiện từ bắt đầu cho đến kết thuacutec

Củng cố lại kiến thức đatilde học trong quaacute trigravenh của mocircn Với website nagravey bạn sẽ được ocircn

tập vagrave vận dụng phần lyacute thuyết cơ sở đatilde học để củng cố vững chắc kiến thức

Xacircy dựng một thư viện kỹ thuật lập trigravenh để tra cứu khi cần thiết

CAacuteC COcircNG VIỆC CẦN LAgraveM

minus Phacircn tiacutech chức năng CSDL

minus Xacircy dựng layout trang chủ module hoacutea thagravenh phần giao diện minus Xacircy dựng EF Code First minus Xacircy dựng Trang chủ minus Xacircy dựng Trang hagraveng hoacutea

o Lọc phacircn loại hagraveng hoacutea o Phacircn trang hagraveng hoacutea với ajax o Tải bổ sung hagraveng hoacutea với ajax (lazy loading)

minus Xacircy dựng Trang chi tiết hagraveng hoacutea o Thocircng tin chi tiết o Hagraveng cugraveng loại o Hagraveng cugraveng nhagrave cung cấp o Hagraveng đatilde xem

minus Quản lyacute Thagravenh viecircn o Đăng kyacute o Đăng nhậpĐăng xuất o Quecircn mật khẩu o Quản lyacute tagravei khoản o Quản lyacute đơn hagraveng

minus Xử lyacute Giỏ hagraveng vagrave Thanh toaacuten o Chọn hagraveng hoacutea o Quản lyacute (thecircmxoacuteasửa) giỏ hagraveng o Đặt hagraveng o Thanh toaacuten kết nối với ngacircn hagraveng (ảo)

minus Phần Admin - Quản lyacute thecircm xoacutea sửa Hagraveng hoacutea minus Phần Admin - Quản lyacute thecircm xoacutea sửa Hoacutea đơn minus Phần Admin ndash Quản lyacute thecircm xoacutea sửa Khaacutech hagraveng minus Phần Admin ndash Quản lyacute Doanh thu minus Phần Admin ndash Quản lyacute tagravei khoản người dugraveng Vai trograve (Role) Phacircn quyecircn minus Phần Admin ndash Thống kecirc

o Hagraveng tồn kho o Doanh số từng mặt hagraveng o Doanh số theo nhagrave cung cấpkhaacutech hagraveng o Doanh số từng thaacutengquyacutenăm

minus Phần Admin ndash Rewrite URL trong ASPNET CoreSEO

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 259

TAgraveI LIỆU THAM KHẢO

Freeman A (2017) Pro ASPNET Core MVC 2 Apress

Joseph A amp Ben A (2018) C 70 in a Nutshell OReilly

Philip J Kevin G amp Ben D (2017) Building Web Applications with Visual Studio

2017 Apress

Rouleau D J (2018) Beginning Entity Framework Core 20 Apress

Smith S (2017) Architecting Modern Web Applications with ASPNET Core and

Microsoft Azure Microsoft Corporation

httpsdotnetgithubio

httpsdocsmicrosoftcomen-usaspnetcore

httpsdocsmicrosoftcomen-usefcore

Page 6: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 7: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 8: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 9: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 10: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 11: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 12: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 13: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 14: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 15: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 16: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 17: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 18: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 19: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 20: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 21: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 22: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 23: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 24: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 25: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 26: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 27: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 28: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 29: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 30: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 31: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 32: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 33: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 34: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 35: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 36: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 37: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 38: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 39: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 40: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 41: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 42: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 43: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 44: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 45: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 46: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 47: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 48: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 49: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 50: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 51: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 52: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 53: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 54: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 55: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 56: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 57: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 58: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 59: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 60: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 61: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 62: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 63: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 64: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 65: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 66: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 67: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 68: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 69: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 70: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 71: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 72: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 73: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 74: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 75: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 76: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 77: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 78: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 79: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 80: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 81: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 82: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 83: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 84: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 85: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 86: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 87: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 88: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 89: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 90: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 91: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 92: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 93: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 94: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 95: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 96: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 97: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 98: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 99: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 100: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 101: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 102: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 103: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 104: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 105: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 106: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 107: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 108: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 109: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 110: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 111: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 112: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 113: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 114: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 115: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 116: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 117: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 118: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 119: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 120: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 121: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 122: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 123: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 124: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 125: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 126: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 127: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 128: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 129: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 130: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 131: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 132: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 133: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 134: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 135: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 136: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 137: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 138: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 139: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 140: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 141: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 142: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 143: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 144: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 145: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 146: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 147: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 148: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 149: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 150: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 151: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 152: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 153: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 154: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 155: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 156: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 157: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 158: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 159: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 160: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 161: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 162: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 163: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 164: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 165: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 166: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 167: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 168: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 169: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 170: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 171: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 172: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 173: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 174: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 175: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 176: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 177: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 178: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 179: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 180: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 181: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 182: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 183: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 184: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 185: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 186: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 187: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 188: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 189: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 190: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 191: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 192: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 193: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 194: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 195: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 196: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 197: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 198: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 199: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 200: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 201: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 202: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 203: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 204: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 205: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 206: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 207: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 208: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 209: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 210: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 211: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 212: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 213: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 214: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 215: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 216: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 217: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 218: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 219: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 220: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 221: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 222: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 223: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 224: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 225: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 226: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 227: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 228: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 229: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 230: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 231: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 232: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 233: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 234: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 235: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 236: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 237: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 238: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 239: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 240: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 241: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 242: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 243: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 244: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 245: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 246: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 247: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 248: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 249: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 250: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 251: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 252: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 253: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 254: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 255: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 256: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 257: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 258: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 259: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM
Page 260: T NGH · 2019. 4. 9. · 3.1.4 Kiến trúc công nghệ ứng dụng web ... 9.6 Mô hình Code First của EF Core ... 11.3.1 Xây dựng API dùng data local..... 226 . TRUNG TÂM