三分鐘快速複習MVC知識
讀這篇文章不意味著你一定要去並且能搞定MVC面試。這篇文章的目的是在面試之前讓你快速複習MVC知識。這篇文章也不是MVC培訓課程。
什麼是MVC (模型 檢視 控制器)?
MVC是一個架構模式,它分離了表現與互動。它被分為三個核心部件:模型、檢視、控制器。下面是每一個部件的分工:
- 檢視是使用者看到並與之互動的介面。
- 模型表示業務資料,並提供資料給檢視。
- 控制器接受使用者的輸入並呼叫模型和檢視去完成使用者的需求。
你能解釋下MVC的完整流程嗎?
下面是MVC(模型、檢視、控制器)架構的控制流程:
- 所有的終端使用者請求被髮送到控制器。
- 控制器依賴請求去選擇載入哪個模型,並把模型附加到對應的檢視。
- 附加了模型資料的最終檢視做為響應傳送給終端使用者。
MVC同時適用於Windows應用和Web應用嗎?
相比Windows應用,MVC架構更適用於Web應用。對於Windows應用,MVP(Model View Presenter )架構更好一點。如果你使用WPF和Silverlight,MVVM更適合。
使用MVC有哪些好處?
MVC有兩個大的好處:
- 分離了關注點。後臺程式碼被移到單獨的類檔案,我們可以最大限度的重複利用程式碼。
- 自動化UI測試成為可能,因為後臺程式碼移到了.NET類。這讓我們更容易做單元測試和自動化測試。
MVC不同於三層架構?
MVC是三層傳統架構的演變。三層架構和MVC有一些通用的組成部分。 顯示如下:
功能性 | 三層 / 分層架構 | Model view controller architecture |
顯示與互動 | 使用者介面 | 檢視 |
UI邏輯 | 使用者介面 | 控制器 |
商業邏輯 / 驗證 | 中間層 | 模型 |
請求首先發送給誰? | 使用者介面 | 控制器 |
訪問資料 | 資料鏈接層 | 資料鏈接層 |
MVC的最新版本是哪個?
在寫這篇文章時MVC已經發行了4個版本:MVC 1 , MVC 2, MVC 3, 和 MVC 4. 所以 MVC 4是最新版本。
每個版本的MVC有什麼不同?
下面的表格列出了詳細的不同點。但是在面試中限於時間問題,很難去說出所有的東西。所以,我標出了所有重要區別。
MVC 2 | MVC 3 | MVC 4 |
|
|
|
MVC中的HTML helpers是什麼?
HTML helpers幫助你渲染檢視中的HTML控制元件。如果在面試中你想展示HTML輸入框,下面是HTML helper程式碼。
<%= Html.TextBox("LastName") %>
checkbox的程式碼如下。用這種方式我們可以建立現存的所有HTML控制元件。
<%= Html.CheckBox("Married") %>
“HTML.TextBox” 和 “HTML.TextBoxFor”有什麼不同?
它們兩個輸出相同的HTML, “HTML.TextBoxFor”是強型別的,但 “HTML.TextBox”不是。下面是一個例項,它僅僅建立了一個名字為 “CustomerCode”的輸入框。
Html.TextBox("CustomerCode")
下面的程式碼是用 “Html.TextBoxFor” 建立的HTML輸入框,從物件"m"中呼叫了屬性”CustomerCode “。
Html.TextBoxFor(m => m.CustomerCode)
相同的方式,我們可以用“Html.CheckBox” 和 “Html.CheckBoxFor”建立checkbox。
MVC的路由選擇是什麼?
路由選擇功能幫你定義一個URL規則,對映URL到控制器。
舉一個例子,我們想讓使用者輸入“ http://localhost/View/ViewCustomer/ ”時,它轉向到“Customer”控制器並且呼叫 DisplayCustomer
。這個通過Maproute方法來定義。程式碼如下:
routes.MapRoute(
"View", // Route name
"View/ViewCustomer/{id}", // URL with parameters
new { controller = "Customer", action = "DisplayCustomer",
id = UrlParameter.Optional }); // Parameter defaults
在哪裡寫路由對映表?
在 “ global.asax ” 檔案。
我們可以對映多個URL到同一個動作嗎?
是的,可以。只需要新增多條不同Key名字的記錄,並且指定同樣的控制器和動作。
使用hyperlink生成連結,如何從一個檢視連結到另一個檢視?
使用 ActionLink
方法,如下圖所示。下面的程式碼生成一個簡單的URL,連結到"Home"控制器的GotoHome動作。
<%= Html.ActionLink("Home","Gotohome") %>
如何限制一個動作的型別為GET或POST?
我們可以給MVC的動作一個HttpGet或HttpPost屬性去限制HTTP的型別。你可以看下面的程式碼段,這個 DisplayCustomer
動作只能用HttpGet方式訪問。如果我們嘗試用Http post的方式,會看到錯誤資訊。
[HttpGet]
public ViewResult DisplayCustomer(int id)
{
Customer objCustomer = Customers[id];
return View("DisplayCustomer",objCustomer);
}
在MVC中如何保持Sessions?
可以通過三種方式保持: tempdata, viewdata, 和viewbag。
tempdata, viewdata, 和 viewbag之間有什麼不同?
圖示: tempdata, viewdata, 和viewbag之間不同點- Temp data -在不同的控制器或動作間轉換時保持資料。另外,進行頁面轉向時,tempdata可以保持資料。它是一個內部的Session變數。
- View data - 可以在控制器和檢視間保持資料。
- View Bag - 它是檢視資料的動態包裝。使用Viewbag不需要型別轉換。它使用的是內部動態關健詞。
- Session 變數 - 使用Session變數可以在任何實體間保持資料。
- 隱藏欄位和HTML控制元件 - 只能何持資料從UI到Controller。可以使用HTML控制器或隱藏欄位,用HTTP方式(POST或GET)傳送資料到控制器。
下表是彙總:
Maintains data between | ViewData/ViewBag | TempData | Hidden fields | Session |
Controller to Controller | No | Yes | No | Yes |
Controller to View | Yes | No |