77 câu hỏi phỏng vấn Asp.net MVC
1. Routing trong MVC là gì?
- ASP.NET Routing cho phép bạn sử dụng các url không dẫn đến 1 file cụ thể trong website, giúp các url trở nên thân thiện hơn với người dùng.
2. Khái niệm MVC?
Mẫu kiến trúc Model – View – Controller được sử dụng nhằm chi ứng dụng thành ba thành phần chính: model, view và controller.
Nền tảng ASP.NET MVC giúp cho chúng ta có thể tạo được các ứng dụng web áp dụng mô hình MVC thay vì tạo ứng dụng theo mẫu ASP.NET Web Forms.
Nền tảng ASP.NET MVC có đặc điểm nổi bật là nhẹ (lighweight), dễ kiểm thử phần giao diện (so với ứng dụng Web Forms), tích hợp các tính năng có sẵn của ASP.NET.
Nền tảng ASP.NET MVC được định nghĩa trong namespace System.Web.Mvc và là một phần của namespace System.Web. MVC là một mẫu thiết kế (design pattern) chuẩn mà nhiều lập trình viên đã quen thuộc. Một số loại ứng dụng web sẽ thích hợp với kiến trúc MVC. Một số khác vẫn thích hợp với ASP.NET Web Forms và cơ chế postbacks. Đôi khi có những ứng dụng kết hợp cả hai kiến trúc trên.
- M là Model: cấu trúc dữ liệu theo cách tin cậy và chuẩn bị dữ liệu theo lệnh của controller.
- V là View: Hiển thị dữ liệu cho người dùng theo cách dễ hiểu dựa trên hành động của người dùng.
- C là Controller: Nhận lệnh từ người dùng, gửi lệnh đến cho Model để cập nhập dữ liệu, truyền lệnh đến View để cập nhập giao diện hiển thị.
3. MVC có những ưu, nhược điểm gì?
Ưu điểm:
- Hệ thống phân ra từng phần nên dễ dáng phát triển
- Chia thành nhiều modun nhỏ nên nhiều người có thể làm chung dự án
- Vấn đề bảo trì cũng tương đối ok, dễ nâng cấp
- Dễ dàng debug trong quá trình xây dung
Nhược điểm:
- Hệ thống sẽ chạy chậm hơn PHP thuần, tuy nhiên nó ko phải là vấn đề 😀
- Xây dựng cầu kì và mất thời gian để xây dựng thư viện, cấu trúc
4. Phân biệt mô hình MVC và Mô hình 3 lớp?
- Điểm giống nhau:
- Cả hai đều là mô hình kiến trúc áp dụng trong lập trình được tách thành 3 thành phần.
- Tách biệt sự phụ thuộc giữa ngôn ngữ lập trình, môi trường phát triển, xử lý logic.
- Các thành phần ở mỗi mô hình có nhiều điểm tương đồng như Presentation Layer và View
- Điểm khác biệt:
- Khác biệt rõ nhất là cách xử lý yêu cầu (workflow) của 2 mô hình (Tham khảo cách làm việc của 2 mô hình).
- Ở MVC, thành phần Model giữ chức năng của cả lớp Business và Data Access trong mô hình 3 Layer.
- 3 Layer thường được sử dụng trong lập trình ứng dụng, trong khi đó MVC được ưu chuộng nhiều trong lập trình website vì tính linh hoạt và không bắt buộc các DTO như 3-Layer.
5. HTML Helpers trong MVC là gì?
Được dùng để tạo ra các thẻ html thay vì viết tay, ví dụ: @Html.TextBox, @Html.TextArea
6. Phân biệt “HTML.TextBox” và “HTML.TextBoxFor”?
Phương thức Html.TextBox () tạo phần tử <input type=”text” /> với tên được chỉ định, giá trị và thuộc tính html.
Ví dụ:
@Html.TextBox(“StudentName”, “hello everyone”, new { @class = “form-control” })
sẽ tạo ra <input class=””form-control”” id=””StudentName”” name=””StudentName”” type=””text”” value=””hello” everyone”=””>
Html.TextBoxFor tạo ra một phần tử input text với thuộc tính model xác định sử dụng một biểu thức lambda.
Ví dụ:
@model Student @Html.TextBoxFor(m => m.StudentName, new { @class = “form-control” })
sẽ tạo ra <input class=””form-control”” id=””StudentName”” name=””StudentName”” type=””text”” value=””This” is=”” value”=””>
7. Code mapping route thì được viết ở đâu?
Trong file Global.asax, hoặc tạo file riêng rồi trong Global.asax add vào ( trong mvc 4 thì được tạo sẵn file riêng là RouteConfig.cs trong thư mục App_Start
8. Làm sao để đi từ một view này tới view khác sử dụng hyperlink?
Dùng thẻ a trong html
9. Làm sao để quy ước rằng một action chỉ được truy cập thông qua phương thức GET hoặc POST?
Dùng các attribute HttpGet và HttpPost trên đầu mỗi Action,
ví dụ:
[HttpGet]
public ActionResult Index()
{
Return View();
}
10. Razor hay ASPX cái nào tốt hơn? Tại sao?
- Razor được giới thiệu từ mvc 3.0, sử dụng Layout Page làm trang chính và razor page làm trang con.
- Aspx có từ mvc1, sử dụng Master page làm trang chính và aspx làm trang con.
- Về hiệu suất thì razor chậm hơn 1 tý.
- Razor ngăn chặn cross-site scripts attacks bằng cách mã hóa các scripts hoặc các thẻ html trước khi hiển thị ra người, còn aspx thì không.
- Razor được sử dụng nhiều hơn vì dễ sử dụng và chuyên nghiệp.
11. Khái niệm Bundling và Minification trong MVC là gì?
Bundling: Là một nhóm file mà có thể được tham chiếu bởi một tên duy nhất và được loaded bởi HTTP requestor.
Minification: Đó là xư lý để bỏ đi các khoảng trống dư thừa, xuống dòng và comment trong code để giảm đi cỡ và cải thiện thời gian load.
Tại sao phải dùng 2 kỹ thuật này: Cơ bản các developer sử dụng nhiều files JS và CSS files và dẫn tới vấn đề performance cho web. Bởi vì nhiều file JS và CSS files yêu cầu nhiều HTTP Requests từ trình duyệt dẫn tới suy giảm về hiệu suất và thời gian load cho web.
12. Làm thế nào để try/catch trên toàn bộ 1 ASPX page?
- Dùng Page_Error event.
13. Phân biệt HttpApplication, Session, ViewSate và HttpContext?
- Cả 4 thành phần trên đều dùng để lưu dữ liệu của một Web Application.
- HttpApplication có tác dụng trong toàn bộ quá trình thực thi của Web Application.
- Session có tác dụng trong 1 lần ghé thăm (visit) của người dùng. Nó kết thúc khi gặp timeout.
- ViewState có tác dụng trong trong 1 trang web.
- HttpContext có tác dụng trong 1 request.
14. Điểm khác nhau giữa View và Partial View trong Asp.net mvc?
View:
- Chứa layout page.
- Viewstart page được render trước khi các view được render.
- View chứa các markup tags như body, html, head, title, meta etc…
- View nặng hơn Partial view.
Partial View:
- Không chứa layout page.
- Partial view không xác nhận cho 1 viewstart.cshtml. Chúng ta không thể để các đoạn code cho 1 partial view bên trong viewstart.cshtml page.
- Partial view được thiết kế để render trong view, vì chúng không chứa các markup tags.
15. MVC là viết tắt của từ gì?
- MVC là viết tắt của từ (Model – View – Controller)
16. Layout trong MVC là gì?
Các trang Layout tương tự như các trang master trong các web form truyền thống. Điều này được sử dụng để thiết lập giao diện chung trên nhiều trang. Trong mỗi trang con, chúng ta có thể tìm thấy
@{
Layout = “~/Views/Shared/TestLayout1.cshtml”;
}
Điều này cho thấy trang con sử dụng trang TestLayout làm trang chính.
17. ViewModel được dùng làm gì trong MVC là gì?
ViewModel là một class đơn giản với các thuộc tính, được sử dụng để liên kết với các view.
ViewModel có thể có các quy tắc xác thực (validation rule) được định nghĩa cho các thuộc tính của nó bằng cách sử dụng chú thích dữ liệu (Data annotations).
18. Các Scaffold template trong MVC là gì?
Scaffold trong ASP.NET MVC được sử dụng để tạo Controller, Model và View cho chức năng create, read, update và delete (CRUD) trong một ứng dụng.
Scaffold sẽ được biết về các quy ước đặt tên được sử dụng cho các model, controller và view.
19. Giải thích Section là gì trong MVC?
Section là một phần của HTML sẽ được hiển thị trong trang Layout. Trong trang Layout, chúng ta sẽ sử dụng cú pháp dưới đây để hiển thị HTML:
@RenderSection(“TestSection”)
Và trong các trang con, chúng ta xác định các phần này như hình dưới đây:
@section TestSection{
<h1>Test Content</h1>
}
20. Ưu điểm của MVC so với ASP.NET là gì?
- Cung cấp sự tách biệt rõ ràng các mối quan hệ giữa UI (Presentation layer), model (Transfer objects / Domain objects / Entities) và business logic (Controller).
- Dễ dàng UNIT Test.
- Cải thiện khả năng tái sử dụng model và view. Chúng ta có thể có nhiều view có thể trỏ đến cùng một model và ngược lại.
- Cải thiện cấu trúc code.
21. Bundle.Config được dùng làm gì trong MVC4?
“BundleConfig.cs” trong MVC4 được sử dụng để đăng ký các bundle bởi hệ thống gộp (bundling) và thu nhỏ (minification).
Nhiều bundles được thêm mặc định bao gồm các thư viện jQuery như – jquery.validate, Modernizr và các reference CSS mặc định.
22. Razor View Engine là gì?
Razor là bản cập nhật chính đầu tiên để hiển thị HTML trong MVC 3. Razor được thiết kế đặc biệt cho View engine syntax.
Trọng tâm chính của việc này là đơn giản hóa và mẫu tập trung vào mã (code-focused templating) để tạo HTML. Dưới đây là ví dụ sử dụng Razor:
@model MvcMusicStore.Models.Customer
@{ViewBag.Title = “Get Customers”;}
<div class=”cust”> <h3><em>@Model.CustomerName</em> </h3>
23. Action trong MVC là gì?
Các Action là các phương thức trong lớp Controller chịu trách nhiệm trả về View hoặc Json.
Action chủ yếu sẽ trả về kiểu – “ActionResult” và nó sẽ được gọi từ phương thức – “InvokeAction()” được gọi bởi Controller.
24. Các Non Action method trong MVC là gì?
Trong MVC, tất cả các public method sẽ được coi là Action. Vì vậy, nếu bạn đang tạo một method và nếu bạn không muốn sử dụng nó như một action method thì method đó phải được thêm thuộc tính “NonAction” như hình dưới đây:
[NonAction]
public void TestMethod()
{
// Method logic
}
25. ViewState là gì?
ViewState là phương pháp để bảo toàn value của page và các control khi postback. ViewState là kỹ thuật quản lý state ở page-level. ViewState mặc định được bật và thường tuần tự hóa dữ liệu trong mọi control trên trang bất kể nó có thực sự được sử dụng trong quá trình xử lý hay không.
Một ứng dụng web là stateless. Điều đó có nghĩa là một new instance của một page được tạo mỗi khi chúng ta thực hiện 1 request tới máy chủ để lấy page đó và sau khi hoàn thành, page của chúng ta đã bị mất ngay lập tức.
26. Postback là gì?
Một postback bắt nguồn từ trình duyệt của client. Thông thường, một trong các control trên page sẽ do người dùng thao tác (click vào button hoặc chọn 1 option khác trong dropdown, v.v.) và control này sẽ bắt đầu postback. State của control này, cộng với tất cả các control khác trên page (được gọi là Viewstate) được postback lại máy chủ web.
27. Một Application pool là gì? Mục đích của nó là gì?
Application pool cho phép bạn cô lập các ứng dụng của mình với nhau, ngay cả khi chúng đang chạy trên cùng một máy chủ. Bằng cách này, nếu có lỗi trong một ứng dụng, nó sẽ không làm sập các ứng dụng khác.
Ngoài ra, Application pool cho phép bạn tách các ứng dụng khác nhau yêu cầu các mức độ bảo mật khác nhau.
28. Sự khác biệt giữa Server.Transfer và Response.Redirect trong Asp.net là gì?
Trong Server.Transfer, page processing chuyển từ trang này sang trang khác mà không cần quay lại trình duyệt của khách hàng. Điều này cung cấp phản hồi nhanh hơn với ít chi phí hơn trên máy chủ. Danh sách lịch sử url của máy khách hoặc của máy chủ hiện tại không được cập nhật trong trường hợp của Server.Transfer.
Response.Redirect được sử dụng để chuyển hướng trình duyệt của người dùng đến một trang hoặc trang web khác. Nó thực hiện chuyển hướng quay trở lại máy khách nơi trình duyệt của khách hàng được chuyển hướng đến trang mới. Danh sách lịch sử trình duyệt của người dùng được cập nhật để phản ánh địa chỉ mới.
29. Kể tên các loại ActionResult con?
ActionResult được sử dụng để biểu diễn kết quả của phương thức action. Dưới đây là các loại ActionResult con:
- ViewResult
- PartialViewResult
- RedirectToRouteResult
- RedirectResult
- JavascriptResult
- JSONResult
- FileResult
- HTTPStatusCodeResult
30. Kể tên các loại caching khác nhau là gì?
ASP.NET có 3 loại caching (bộ nhớ đệm):
- Output Caching.
- Fragment Caching.
- Data Caching.
31. Ý nghĩa của Unobtrusive JavaScript là gì?
Đây là một thuật ngữ chung truyền tải một triết lý chung, tương tự như thuật ngữ REST (Representational State Transfer). Unobtrusive JavaScript không trộn lẫn mã JavaScript trong page markup của bạn.
Ví dụ: Thay vì sử dụng các sự kiện như onclick và onsubmit, Unobtrusive JavaScript sẽ gắn vào các element bằng ID hoặc class của chúng dựa trên các data- attributes của HTML5.
32. Các item trong ViewState tồn tại bao lâu?
Chúng tồn tại trong suốt thời gian tồn tại của trang hiện tại.
33. Liệt kê các event trong lifecycle của page trong ASP.NET?
- Page_PreInit
- Page_Init
- Page_InitComplete
- Page_PreLoad
- Page_Load
- Page_LoadComplete
- Page_PreRender
- Render
34. Các control được load đầy đủ trong sự kiện nào?
Sự kiện Page_Load.
35. Trình bày về JSON Binding?
JavaScript Object Notation (JSON) binding được hỗ trợ bắt đầu từ MVC3 thông qua JsonValueProviderFactory, cho phép các phương thức action chấp nhận và mô hình hóa dữ liệu ở định dạng JSON.
Điều này rất hữu ích trong các tình huống Ajax như client templates và liên kết dữ liệu cần postback dữ liệu về máy chủ.
36. ViewState có sẵn trong event nào của page cycle (chu kì trang)?
Sau Init() và trước Page_Load().
37. Viewstate được lưu trữ ở đâu sau khi trang postback?
ViewState được lưu trữ trong một field ẩn trên trang ở phía client.
ViewState được chuyển đến client và trở lại server, và không được lưu trữ trên server hoặc bất kỳ nguồn bên ngoài nào khác.
38. Làm cách nào chúng ta có thể ngăn trình duyệt caching một trang ASPX?
Chúng ta có thể SetNoStore trên HttpCachePolicy object được hiển thị bởi thuộc tính Cache của đối tượng Response:
Response.Cache.SetNoStore();
Response.Write(DateTime.Now.ToLongTimeString());
39. Hãy nêu các Validator khác nhau trong ASP.NET?
Client-Side Validation: Khi xác thực (validation) được thực hiện trên trình duyệt client, thì nó được gọi là Client-Side Validation, chúng ta sử dụng JavaScript để thực hiện Client-Side Validation.
Server-Side Validation: Khi xác thực xảy ra trên server, thì nó được gọi là Server-Side Validation.
Server-Side Validation là một hình thức xác thực an toàn. Ưu điểm chính của Server-Side Validation là nếu người dùng bằng cách nào đó bỏ qua Client-Side Validation, chúng ta vẫn có thể bắt và ngăn chặn được vấn đề đó ở server-side.
40. ViewState là gì? Nó được encode như thế nào? Nó có được mã hóa không? Ai sử dụng ViewState?
ViewState là một loại hash map (hoặc ít nhất bạn có thể nghĩ theo cách đó) mà ASP.NET sử dụng để lưu trữ tất cả thông tin tạm thời về một page – ví dụ như những option đang được chọn trong mỗi select box, các giá trị trong mỗi text box, panel nào đang mở, v.v. Bạn cũng có thể sử dụng nó để lưu trữ bất kỳ thông tin tùy ý nào.
Toàn bộ map được tuần tự hóa (serialized) và mã hóa (encoded) và được giữ trong một biến ẩn (form field: __VIEWSTATE) được postback tới máy chủ bất cứ khi nào bạn thực hiện bất kỳ hành động nào trên trang có yêu cầu tới máy chủ. Đây là cách bạn có thể truy cập các giá trị trên các controls từ server code. Nếu bạn thay đổi bất kỳ value nào trong server code, thay đổi đó được thực hiện ở ViewState và được gửi trở lại trình duyệt.
Tuy nhiên, chỉ cần cẩn thận về lượng thông tin bạn lưu trữ ở ViewState … nó có thể nhanh chóng trở nên cồng kềnh và chậm chuyển mỗi lần đến máy chủ và trở lại.
ViewState hoàn toàn không được encrypt. Chỉ được encode cơ bản, nên dễ dàng đảo ngược.
41. RouteConfig.cs trong MVC 4 là gì?
“RouteConfig.cs” giữ cấu hình về routing cho MVC.
RouteConfig sẽ được khởi tạo trên sự kiện Application_Start được đăng ký trong Global.asax.
42. View có thể được chia sẻ cho nhiều Controller không? Nếu Có, làm thế nào chúng ta có thể làm điều đó?
Có, chúng tôi có thể chia sẻ View cho nhiều Controller. Chúng ta có thể đặt View trong thư mục “Shared“.
Khi chúng ta tạo một dự án MVC mới, chúng tôi có thể thấy trang Layout sẽ được thêm vào trong thư mục ”Shared”, đó là vì nó được sử dụng bởi nhiều trang con.
43. Bạn có thể giải thích vòng đời (lifecycle) của page của MVC không?
Theo các tiến trình như trình tự dưới đây:
- Khởi tạo ứng dụng.
- Routing.
- Khởi tạo và thực thi Controller.
- Xác định vị trí và gọi Action của Controller.
- Khởi tạo và hiển thị View.
44. HTML Helpers trong MVC là gì?
HTML Helpers giống như các control trong các web form cũ. Nhưng HTML Helper nhẹ hơn so với các web control vì nó không giữ viewstate và các event.
HTML Helpers trả về chuỗi HTML được hiển thị trực tiếp trong trang HTML. Bạn cũng có thể tự tạo các HTML Helper theo ý mình bằng cách ghi đè class “HtmlHelper”.
45. PartialView trong MVC là gì?
PartialView tương tự như UserControls trong các web form cũ. Được sử dụng với mục đích tái sử dụng các view.
Nó được chia sẻ với nhiều View nên chúng được lưu trong thư mục “Shared”. Partial Views có thể được hiển thị theo những cách sau:
- Html.Partial()
- Html.RenderPartial()
46. Kể ra các methods được sử dụng để hiển thị View trong MVC?
Dưới đây là các methods được sử dụng để hiển thị View từ Action:
- View() – Để trả về View từ Action.
- PartialView() – Để trả về Partial view từ Action.
- RedirectToAction() – Để chuyển hướng đến Action khác nhau có thể nằm trong cùng một Controller hoặc khác Controller.
- Redirect() – Tương tự như “Response.Redirect()” trong webforms, được sử dụng để chuyển hướng đến URL được chỉ định.
- RedirectToRoute() – Chuyển hướng đến Action từ URL được chỉ định nhưng phải đúng với URL trong route table.
47. Bạn có thể giải thích RenderBody và RenderPage trong MVC không?
RenderBody giống như ContentPlaceHolder trong các webforms. Nó tồn tại trong trang Layout và sẽ hiển thị các page / view con. Trang Layout sẽ chỉ có một phương thức RenderBody().
RenderPage cũng tồn tại trong trang Layout và RenderPage() có thể có nhiều ở trong trang Layout.
48. Sự khác biệt giữa ViewBag và ViewData trong MVC?
ViewBag là một trình bao bọc xung quanh ViewData, cho phép tạo các thuộc tính động. Lợi thế của ViewBag so với ViewData sẽ là:
- Trong ViewBag, không cần nhập các objects như trong ViewData.
- ViewBag sẽ tận dụng từ khóa động được giới thiệu trong v4.0. Nhưng trước khi sử dụng ViewBag, chúng tôi phải lưu ý rằng ViewBag chậm hơn ViewData.
49. Attribute Routing trong MVC là gì?
ASP.NET Web API hỗ trợ routing kiểu này. Điều này được giới thiệu trong MVC5.
Trong kiểu routing này, các thuộc tính đang được sử dụng để định nghĩa routes. Loại routing này cho phép kiểm soát nhiều hơn loại routing URI cổ điển.
Attribute Routing có thể được định nghĩa ở cấp Controller hoặc ở cấp Action như bên dưới:
[Route(“{action = TestCategoryList}”)] — Controller Level
[Route(“customers/{TestCategoryId:int:min(10)}”)] — Action Level
50. Thuộc tính “HelperPage.IsAjax” là gì?
Thuộc tính HelperPage.IsAjax trả về một giá trị cho biết Ajax có đang được sử dụng trong request của trang Web hay không.
51. Sự khác biệt giữa ViewResult() và ActionResult() trong ASP.NET MVC?
public ViewResult Index()
{
return View();
}
public ActionResult Index()
{
return View();
}
ActionResult là một abstract class.
ViewResult bắt nguồn từ ActionResult. Các lớp JsonResult và PartialViewResult cũng bắt nguồn từ ActionResult.
Sự khác biệt duy nhất là với ActionResult, Controller của bạn không chắc sẽ luôn trả về một View – bạn có thể thay đổi phần body của method để trả về một RedirectResult hoặc một cái gì đó khác tùy vào điều kiện bạn thiết lập.
Và một số kiểu con của ActionResult là:
- ViewResult – Hiển thị một View cụ thể.
- PartialViewResult – Hiển thị partial view cụ thể.
- EmptyResult – Trả về một response trống.
- RedirectResult – Thực hiện chuyển hướng HTTP đến một URL được chỉ định.
- RedirectToRouteResult – Thực hiện chuyển hướng HTTP đến một URL được xác định bởi routing engine, dựa trên dữ liệu route được cho.
- JsonResult – Trả về 1 dữ liệu dạng JSON.
- JavaScriptResult – Trả về một đoạn mã JavaScript có thể được thực thi trên client.
- ContentResult – Ghi nội dung vào luồng response mà không yêu cầu View.
- FileContentResult – Trả về một file cho client.
- FileStreamResult – Trả về một file cho client, file này được cung cấp bởi một Stream.
- FilePathResult – Trả về một file cho máy khách.
52. Một số lợi thế của việc sử dụng ASP.Net MVC so với Webforms?
Những ưu điểm chính của ASP.Net MVC là:
- Cho phép toàn quyền kiểm soát HTML được hiển thị.
- Cung cấp khả năng Separation of Concerns (SoC).
- Cho phép Test Driven Development(TDD).
- Tích hợp dễ dàng với các JavaScript framework.
- Tuân theo thiết kế bản chất không trạng thái (stateless nature) của web.
- Hỗ trợ SEO tốt.
- Không có sự kiện ViewState và PostBack.
Ưu điểm chính của ASP.Net Web Form là:
- Cung cấp RAD development.
- Dễ dàng sử dụng cho các developers đã từng phát triển ứng dụng bằng winform.
53. Route table được tạo như thế nào trong ASP.NET MVC?
Hàm “RegisterRoutes()” (được sử dụng để đăng ký các route) sẽ được thêm vào trong hàm “Application_Start()” của file global.asax, được kích hoạt khi ứng dụng được chạy hoặc khởi động.
54. TempData là gì trong MVC?
TempData là một cặp key-value dưới dạng ViewData. Điều này bắt nguồn từ class “TempDataDictionary“. TempData được sử dụng khi dữ liệu được sử dụng trong hai yêu cầu liên tiếp, có thể là giữa các action hoặc giữa các controller.
55. Validation Annotations là gì?
Validation Annotations là các thuộc tính có thể được tìm thấy trong namespace tên là “System.ComponentModel.DataAnnotations“. Các thuộc tính này sẽ được sử dụng để xác thực phía server và xác thực phía client cũng được hỗ trợ.
Bốn thuộc tính – Required, String Length, Regular Expression and Range được sử dụng để xác thức các tình huống phổ biến.
56. Separation of Concerns trong ASP.NET MVC là gì?
Đó là quá trình chia nhỏ chương trình thành nhiều tính năng khác nhau mà sự trùng lặp chức năng càng ít càng tốt. MVC pattern quan tâm đến việc tách nội dung khỏi bản trình bày và xử lý dữ liệu khỏi nội dung.
57. AJAX Helpers trong MVC là gì?
AJAX Helpers được sử dụng để tạo các element hỗ trợ AJAX như các forms và links sử dụng Ajax để thực hiện request bất đồng bộ và đó là các phương thức mở rộng của lớp AJAXHelper có trong System.Web.Mvc.
58. Dependency Resolver là gì?
Dependency Resolver đã được giới thiệu trong MVC3 và nó được đơn giản hóa rất nhiều khi sử dụng dependency vào ứng dụng của bạn. Điều này trở nên dễ dàng và hữu ích cho việc tách các component của ứng dụng và giúp chúng dễ kiểm tra và cấu hình hơn.
59. Tại sao lại sử dụng Html.Partial trong MVC?
Phương thức này được sử dụng để hiển thị partial view cụ thể dưới dạng một chuỗi HTML. Phương pháp này không phụ thuộc vào bất kỳ action nào. Chúng ta có thể sử dụng nó như sau:
@Html.Partial("TestPartialView")
60. Html.RenderPartial là gì?
Kết quả của hàm “RenderPartial” được trực tiếp ghi vào HTML response. Phương thức này không trả về bất kỳ thứ gì (void). Phương pháp này cũng không phụ thuộc vào action.
Phương thức RenderPartial() gọi “Write()” bên trong và chúng ta phải đảm bảo rằng phương thức “RenderPartial” được đặt trong dấu ngoặc.
61. RedirectPermanent trong ASP.Net là gì?
RedirectPermanent thực hiện một chuyển hướng vĩnh viễn từ URL được yêu cầu sang URL được chỉ định. Khi quá trình chuyển hướng hoàn tất, nó cũng trả về 301 Moved Permanently (Đã di chuyển vĩnh viễn).
62. Sự khác biệt giữa webConfig và machineConfig là gì?
WebConfig dành riêng cho một ứng dụng web, còn machineConfig dành riêng cho một máy hoặc server.
Có thể có nhiều tệp webConfig trong một ứng dụng nhưng chúng ta chỉ có thể có một tệp machineConfig trên server.
63. Chúng ta sử dụng loại cache nào nếu chúng ta muốn cache một phần của trang thay vì toàn bộ trang?
Chúng ta có thể sử dụng Fragment Caching:
<%@ OutputCache Duration="120" VaryByParam="CategoryID;SelectedID"%>
64. Làm thế nào chúng ta có thể buộc tất cả các validation controls chạy?
Phương thức Page.Validate() được sử dụng để buộc tất cả các validation controls chạy và thực hiện validation.
65. Nêu các sự khác nhau của các option trong Session state management của ASP.NET?
In-Process: lưu trữ session trong bộ nhớ trên web server.
Out-of-Process: Session state management lưu trữ dữ liệu trong một máy chủ bên ngoài (external server). External server có thể là SQL Server hoặc State Server. Tất cả các object được lưu trữ trong session được yêu cầu phải có thể tuần tự hóa (serializable) cho Out-of-Process state management.
66. Có thể tạo ứng dụng web với cả web forms và MVC không?
Có, chúng ta phải có các MVC assembly references bên dưới trong ứng dụng web forms:
- System.Web.Mvc
- System.Web.Razor
- System.ComponentModel.DataAnnotations
67. Sự khác biệt giữa Web Service and WCF Service là gì?
Web Service dựa trên SOAP và trả về dữ liệu ở dạng XML. Nó chỉ hỗ trợ giao thức HTTP/ HTTPS. Nó không phải là mã nguồn mở nhưng có thể được sử dụng bởi bất kỳ ứng dụng client nào hỗ trợ XML. Nó chỉ có thể được host trên IIS.
WCF cũng dựa trên SOAP và trả về dữ liệu ở dạng XML. Đó là sự phát triển của web service (ASMX) và hỗ trợ nhiều giao thức khác nhau như TCP, HTTP, HTTPS, Named Pipes, MSMQ. Vấn đề chính với WCF là, cấu hình nhiều và tẻ nhạt. Nó không phải là mã nguồn mở nhưng có thể được sử dụng bởi bất kỳ ứng dụng client nào hỗ trợ XML.
Nó có thể được host trong application hoặc trên IIS hoặc sử dụng window service.
68. Các loại cookie khác nhau nào trong ASP.NET là gì?
Session Cookie – Nằm trên máy client trong một single session cho đến khi người dùng đăng xuất.
Persistent Cookie – Nằm trên máy của người dùng trong một khoảng thời gian được chỉ định cho thời hạn sử dụng của nó, chẳng hạn như 10 ngày, một tháng và không bao giờ.
69. Sự khác biệt giữa <system.web> và <system.webServer> là gì?
- System.web dùng để cấu hình IIS 6.0, còn system.webServer được sử dụng để cấu hình IIS 7.0.
- IIS 7.0 bao gồm một ASP.NET pipeline mới và một số cấu hình khác, do đó có các phần cấu hình bổ sung.
- System.web là dành cho Classic Mode. System.webServer dành cho Integrated Pipeline Mode (có sẵn trong IIS7+).
70. Sự khác biệt giữa pipeline mode ‘classic’ và ‘integrated’ trong IIS7 là gì?
Classic mode (chế độ duy nhất trong IIS6 trở xuống) là chế độ mà IIS chỉ hoạt động trực tiếp với các ISAPI extension và bộ lọc ISAPI. Trong mode này, ASP.NET không khác nhiều so với PHP hoặc các công nghệ khác dành cho IIS. Sự tách biệt này giữa các mô hình request-processing IIS và ASP.NET dẫn đến việc trùng lặp một số bước xử lý, chẳng hạn như xác thực (authentication ) và ủy quyền (authorization).
Mặt khác, Integrated mode là một mode mới trong IIS7 trong đó IIS pipeline được tích hợp chặt chẽ như ASP.NET request pipeline. ASP.NET có thể xem mọi request mà nó muốn và thao tác mọi thứ trong quá trình thực hiện. Trong mode này, ASP.NET HttpModules về cơ bản có sức mạnh gần như của một bộ lọc ISAPI và ASP.NET HttpHandlers có thể có khả năng gần tương đương như một ISAPI extension.
71. HttpModule trong ASP.Net là gì?
Các HTTP modules chặn các request đến và đưa vào pre-processing logic trong ASP.Net request processing pipeline.
Có hai cách mà bạn có thể đưa logic vào request pipeline của ứng dụng ASP.NET là – HttpHandlers và HttpModules.
HttpModules là một phần nằm trong ASP.NET request processing pipeline và được gọi theo mọi request được gửi đến ứng dụng của bạn. HttpModules có thể có quyền truy cập vào các lifecyle event của một reqquest và do đó chúng cũng có thể được sử dụng để thay đổi response.
72. Katana là gì?
- Katana là một framework được phát triển đầy đủ để làm cầu nối giữa các ASP.NET frameworks hiện tại và đặc tả OWIN.
- Katana là một tập hợp các component của Microsoft được xây dựng bằng cách sử dụng các thông số kỹ thuật OWIN. Một số component này bao gồm Web API, ASP.NET Identity và SignalR.
- vNext là sự kế thừa của Katana (đó là lý do tại sao chúng trông rất giống nhau) và ASP.NET vNext hiện được gọi là ASP.NET 5.
73. HttpHandler trong ASP.NET là gì? Nó được sử dụng như thế nào và tại sao?
Nói một cách đơn giản nhất, ASP.NET HttpHandler là một lớp thực thi giao diện System.Web.IHttpHandler.
ASP.NET HTTPHandlers chịu trách nhiệm chặn các request được gửi đến máy chủ ứng dụng web ASP.NET của bạn. Chúng chạy dưới dạng các quy trình để đáp ứng request được gửi đến trang ASP.NET.
Trình xử lý phổ biến nhất là một trình xử lý trang ASP.NET xử lý tệp .aspx. Khi người dùng yêu cầu tệp .aspx, yêu cầu sẽ được trang xử lý thông qua trình xử lý trang.
ASP.NET cung cấp một số trình xử lý HTTP mặc định:
- Page Handler (.aspx): xử lý các trang Web.
- User Control Handler(.ascx): xử lý các trang Web user control.
- Web Service Handler (.asmx): xử lý các trang Web service.
- Trace Handler (trace.axd): xử lý chức năng theo dõi.
74. Sự khác biệt giữa Web API và Web service là gì?
Một Web service thường cung cấp một WSDL mà từ đó bạn có thể tự động tạo các trang khách hàng. Web service dựa trên giao thức SOAP.
ASP.NET Web API là một framework mới hơn của Microsoft giúp bạn xây dựng các giao diện dựa trên REST. Response có thể là JSON hoặc XML, nhưng không có cách nào để tạo clients tự động vì Web API không cung cấp một service như WSDL như Web services.
75. Kể tên một số nhược điểm của ASP.NET WebForms so với MVC?
MVC gần như LUÔN LUÔN là giải pháp tốt hơn. Đó là tại vì:
- Lifecycle của trang đơn giản và hiệu quả hơn.
- Không có cái gọi là controls ngoài các html controls. Bạn không cần debug output của mình để xem ASP.Net đang tạo ra những gì.
- ViewModels cung cấp cho bạn sức mạnh to lớn và loại bỏ nhu cầu thực hiện control binding theo cách thủ công và nó hạn chế nhiều lỗi liên quan đến binding.
- Bạn có thể có nhiều form trên một page. Đây là một hạn chế nghiêm trọng của WebForms.
- Web là stateless và MVC khớp với kiến trúc của web hơn. Webform giới thiệu state và các lỗi bạn gặp phải thường trong ViewState. ViewState là tự động và hoạt động ở chế độ nền, vì vậy không phải lúc nào nó cũng hoạt động theo cách bạn muốn.
- Những ứng dụng web ngày nay cần làm việc với ajax. MVC làm cho ajax trở nên tốt hơn, dễ dàng hơn và hiệu quả hơn rất nhiều với JQuery.
- Bởi vì bạn có thể có nhiều form trên một trang và vì kiến trúc được điều khiển bởi các lệnh gọi đến url, bạn có thể thực hiện những việc thú vị như ajax tải một form khác, hoặc một form dùng để chỉnh sửa thông tin vào trang hiện tại của bạn bằng JQuery. Một khi bạn nhận ra điều này cho phép bạn làm gì, bạn có thể làm những điều tuyệt vời một cách dễ dàng.
- ASP.Net WebForms không chỉ là một phần trừu tượng so với html, nó còn là một thứ cực kỳ phức tạp. Đôi khi bạn gặp phải một lỗi kỳ lạ và phải vật lộn với nó lâu hơn mức cần thiết. Trong nhiều trường hợp, bạn thực sự có thể thấy nó đang làm gì sai nhưng bạn không thể làm gì với nó. Bạn kết thúc việc kỳ lạ cách giải quyết.
- WebForms không tạo ra một công nghệ tốt cho các designers. Các designer thường thích làm việc trực tiếp với html. Trong MVC designer chỉ cần nhìn qua, còn trong WebForms là nửa ngày làm việc để designer hoàn thành công việc.
- Khi nền tảng web đang phát triển nhanh chóng, WebForms sẽ không theo kịp. Nó không biết về các thẻ hoặc tính năng mới của HTML5, nó sẽ vẫn hiển thị nội dung tương tự trừ khi bạn nhận được (thường xuyên) các controls đắt tiền của bên thứ 3 hoặc chờ đợi Microsoft phát hành bản cập nhật.
- Các controls trong WebForms giới hạn bạn theo nhiều cách. Trong MVC, bạn có thể chỉ cần lấy một thư viện JQuery và tích hợp nó vào các mẫu của bạn.
76. Cái gì trong ASP.NET Core là tương đương với WebForms?
ASP.NET Core Razor Pages tương đương với “Classic ASP.NET Web Forms“.
Razor Pages là một khía cạnh mới của ASP.NET Core MVC giúp code các kịch bản tập trung vào trang dễ dàng hơn và hiệu quả hơn.
77. Cross Page Posting là gì?
Khi chúng ta nhấp vào nút submit trên một trang web, trang đó sẽ post dữ liệu lên cùng một trang. Kỹ thuật mà chúng ta post dữ liệu lên các trang khác nhau được gọi là Cross Page Posting. Điều này được thực hiện bằng cách thiết lập thuộc tính POSTBACKURL của nút làm chức năng postback.