Trong phần này, bạn sẽ tìm hiểu về Model Binding (liên kết mô hình) trong ASP.NET MVC.
Để hiểu rõ Model Binding trong MVC, trước tiên hãy xem cách bạn có thể nhận các giá trị yêu cầu HTTP trong phương thức hành động bằng cách sử dụng kiểu ASP.NET truyền thống.
Hình dưới đây cho thấy cách bạn có thể nhận các giá trị từ yêu cầu HTTP GET và HTTP POST bằng cách sử dụng trực tiếp đối tượng Request trong phương thức hành động.
Như bạn có thể thấy trong hình trên, chúng tôi sử dụng đối tượng Request.QueryString và Request (Request.Form) để nhận giá trị từ yêu cầu HTTP GET và HTTP POST.
Truy cập các giá trị yêu cầu bằng cách sử dụng đối tượng Request là một hoạt động cồng kềnh, lãng phí thời gian, nhàm chán, dễ gây ra lỗi và khó bảo trì.
Với Model Binding (liên kết mô hình), ASP.NET MVC tự động chuyển đổi các giá trị trong yêu cầu HTTP (từ chuỗi truy vấn hoặc form biểu mẫu) thành các tham số của phương thức hành động. Các tham số này có thể là kiểu dữ liệu nguyên thủy hoặc kiểu dữ liệu phức tạp.
Binding kiểu dữ liệu nguyên thủy
Yêu cầu HTTP GET nhúng dữ liệu trực tiếp vào chuỗi truy vấn. ASP.NET MVC sẽ tự động chuyển đổi một chuỗi truy vấn thành các tham số của phương thức hành động.
Ví dụ: chuỗi truy vấn “id” trong yêu cầu GET sau đây sẽ tự động được ánh xạ tới tham số id của phương thức hành động Edit()
.
Bạn cũng có thể có nhiều tham số trong phương thức hành động với các kiểu dữ liệu khác nhau. Các giá trị chuỗi truy vấn sẽ được chuyển đổi thành tham số dựa trên tên phù hợp.
Tips: Model Binding không phân biệt chữ hoa, chữ thường. Vì vậy, tham số “id” có thể là “ID” hoặc “Id”.
Ví dụ: http://localhost/student/edit?id = 1&name=John sẽ ánh xạ tới tham số id và name của phương thức hành động Edit()
sau.
Binding kiểu dữ liệu phức tạp
Model Binding (liên kết mô hình) cũng hoạt động trên các kiểu dữ liệu phức tạp. Model Binding trong ASP.NET MVC tự động chuyển đổi dữ liệu các trường biểu mẫu của yêu cầu HTTP POST thành các thuộc tính của một tham số kiểu dữ liệu phức tạp của một phương thức hành động.
Hãy xem các lớp model sau đây.
Bây giờ, bạn có thể tạo một phương thức hành động có tham số kiểu Student. Trong ví dụ sau, phương thức hành động Edit()
(có ActionVerbs là HttpPost) có tham số kiểu Student.
Bây giờ ASP.NET MVC sẽ tự động ánh xạ các trường của biểu mẫu sang các thuộc tính của tham số kiểu Student khi biểu mẫu gửi yêu cầu HTTP POST đến phương thức hành động Edit()
như dưới đây.
Vì vậy, nó tự động liên kết các trường biểu mẫu với tham số loại phức tạp của phương thức hành động.
FormCollection
Ngoài ra, bạn cũng có thể bao gồm tham số kiểu FormCollection trong phương thức hành động để truy xuất tất cả các giá trị từ các trường mẫu xem như dưới đây.
Tuy nhiên FormCollection cũng là một hoạt động cồng kềnh, lãng phí thời gian, nhàm chán, dễ gây ra lỗi và khó bảo trì tương tự như Request.
Thuộc tính Bind
ASP.NET MVC cũng cho phép bạn chỉ định các thuộc tính nào của lớp Model mà bạn muốn liên kết.
Thuộc tính [Bind] sẽ cho phép bạn chỉ định các thuộc tính chính xác mà Model Binding sẽ liên kết.
Trong ví dụ sau, phương thức hành động Edit sẽ chỉ liên kết thuộc tính StudentId và StudentName của Model Student.
Bạn cũng có thể sử dụng các thuộc tính Exclude để bỏ qua các thuộc tính mà bạn không muốn liên kết như dưới đây.
Thuộc tính Bind sẽ cải thiện hiệu suất bằng cách chỉ liên kết các thuộc tính mà bạn cần.
Cơ chế hoạt động của Model Binding
Như bạn đã thấy rằng Model Binding tự động chuyển đổi các giá trị yêu cầu thành một đối tượng kiểu nguyên thủy hoặc kiểu phức tạp.
Model Binding là một quá trình hai bước. Đầu tiên, nó thu thập các giá trị từ yêu cầu HTTP đến và thứ hai, liên kết chúng với các tham số kiểu nguyên thủy hoặc kiểu phức tạp.
Các trình cung cấp giá trị (Value Providers) chịu trách nhiệm thu thập các giá trị từ yêu cầu và Model Binders chịu trách nhiệm liên kết các giá trị với tham số.
Các trình cung cấp giá trị mặc định lấy các giá trị từ các nguồn sau:
- Các tham số được liên kết tới hành động trước đó, khi hành động là hành động con.
- Các trường của biểu mẫu (Request.Form)
- Các giá trị thuộc tính trong phần thân yêu cầu JSON (Request.InputStream), nhưng chỉ khi yêu cầu là một yêu cầu AJAX.
- Dữ liệu định tuyến (RouteData.Values)
- Các tham số chuỗi truy vấn (Request.QueryString)
- Các tập tin đã upload (Request.Files)
ASP.NET MVC có lớp DefaultModelBinder liên kết hiệu quả hầu hết các kiểu mô hình.
Truy cập MSDN để biết thông tin chi tiết về Model Binding.
This is really interesting, You’re a very skilled blogger. I’ve joined your feed and look forward to seeking more of your magnificent post. Also, I’ve shared your site in my social networks!
Lovely! This has been an absolutely fantastic post. I appreciate you sharing these specifics.
Szpiegowskie telefonu – Ukryta aplikacja śledząca, która rejestruje lokalizację, SMS-y, dźwięk rozmów, WhatsApp, Facebook, zdjęcie, kamerę, aktywność w Internecie. Najlepsze do kontroli rodzicielskiej i monitorowania pracowników. Szpiegowskie Telefonu za Darmo – Oprogramowanie Monitorujące Online. https://www.xtmove.com/pl/
I loved even more than you will get done right here. The picture is nice, and your writing is stylish, but you seem to be rushing through it, and I think you should give it again soon. I’ll probably do that again and again if you protect this hike.
Can you be more specific about the content of your article? After reading it, I still have some doubts. Hope you can help me.
Thanks I have just been looking for information about this subject for a long time and yours is the best Ive discovered till now However what in regards to the bottom line Are you certain in regards to the supply
lasuna over the counter – cheap lasuna tablets purchase himcolin pill
I just could not depart your web site prior to suggesting that I really loved the usual info an individual supply in your visitors Is gonna be back regularly to check up on new posts
Vitazen Keto Gummies very informative articles or reviews at this time.
besifloxacin eye drops – order besifloxacin online cheap buy sildamax generic
order neurontin 100mg pills – brand azulfidine oral sulfasalazine 500mg
brand benemid 500 mg – monograph 600 mg sale buy tegretol 400mg for sale
mebeverine tablet – buy generic etoricoxib 120mg purchase cilostazol for sale
celebrex 100mg generic – brand celecoxib 100mg indocin buy online
order diclofenac 100mg generic – generic cambia aspirin 75mg tablet
order rumalaya online – buy cheap generic shallaki elavil 10mg for sale
allegheny county real estate Hi there to all, for the reason that I am genuinely keen of reading this website’s post to be updated on a regular basis. It carries pleasant stuff.
cost mestinon 60 mg – azathioprine for sale purchase azathioprine generic
voveran drug – buy diclofenac tablets nimodipine over the counter
order baclofen 25mg – lioresal medication brand piroxicam 20mg
order meloxicam generic – rizatriptan 5mg generic brand toradol 10mg
deltasone 10mg tablet – elimite order buy generic elimite
permethrin cost – tretinoin cream without prescription oral tretinoin
betnovate 20gm generic – betnovate 20 gm usa order monobenzone generic
purchase metronidazole pills – buy cenforce 50mg generic buy generic cenforce 50mg