ASP.NET MVC 面試問題



親愛的讀者,這些ASP.NET MVC 面試問題是專門設計用來讓您熟悉在ASP.NET MVC主題的面試中可能遇到的問題型別的。根據我的經驗,優秀的訪談者在面試期間很少計劃要問任何特定問題,通常問題從主題的一些基本概念開始,然後根據進一步的討論以及您的回答繼續進行。

ASP.Net MVC 是一種模式,用於將應用程式的實現邏輯拆分為三個元件,即模型、檢視和控制器。

模型:它基本上是一個業務實體,用於表示應用程式資料。控制器:使用者傳送的請求始終透過控制器傳遞,它的職責是使用 View() 方法重定向到特定的檢視。檢視:它是 ASP.Net MVC 的表示層。

新增的功能如下:添加了移動模板。添加了用於建立基於 REST 的服務的 ASP.NET Web API 模板。非同步控制器任務支援。Java 指令碼的捆綁。為 ASP.Net MVC 路由、Web API、Bundle 等分離配置。

以下是按順序執行的過程:

  • 應用程式初始化
  • 路由
  • 例項化並執行控制器
  • 定位並呼叫控制器操作
  • 例項化並呈現檢視。

  • 在 UI(表示層)、模型(傳輸物件/域物件/實體)和業務邏輯(控制器)之間提供了清晰的分離關注點。
  • 易於進行單元測試。
  • 提高了模型和檢視的可重用性。我們可以有多個檢視可以指向同一個模型,反之亦然。
  • 改進了程式碼結構。

它是將程式分解成各種不同的功能的過程,這些功能的功能重疊儘可能少。ASP.Net MVC 模式關注於將內容與表示以及資料處理與內容分離。

Razor 是在 ASP.Net MVC 3 中渲染 HTML 的第一個主要更新。Razor 專為檢視引擎語法而設計。其主要重點是簡化和程式碼化的 HTML 生成模板。以下是使用 Razor 的示例

@model ASP.Net MVCMusicStore.Models.Customer
@{ViewBag.Title = "Get Customers";}
< div class="cust"> <h3><em>@Model.CustomerName</<em> </<h3><div>

這是一個通用術語,傳達了一種普遍的理念,類似於 REST(表述性狀態轉移)術語。非侵入式 JavaScript 不會將 JavaScript 程式碼混合到頁面標記中。例如:不是使用 onclick 和 onsubmit 等事件,非侵入式 JavaScript 透過其 ID 或類根據 HTML5 資料屬性附加到元素。

檢視模型是一個帶有屬性的普通類,用於將其繫結到強型別檢視。檢視模型可以使用資料註釋為其屬性定義驗證規則。

路由是將傳入請求與路由表中註冊的 URL 模式進行匹配的模式匹配機制。類:“UrlRoutingModule”用於同一過程。

操作是控制器類中的方法,負責返回檢視或 json 資料。操作主要具有返回型別:“ActionResult”,並且將從方法:“InvokeAction()”呼叫,該方法由控制器呼叫。

ASP.NET Web API 支援這種型別的路由。這在 ASP.Net MVC5 中引入。在這種型別的路由中,屬性用於定義路由。這種型別的路由可以更好地控制經典 URI 路由。屬性路由可以在控制器級別或操作級別定義,例如

[Route("{action = TestCategoryList}")] - Controller Level
[Route("customers/{TestCategoryId:int:min(10)}")] - Action Level

只需將 @Model.CustomerName 方法:“MapASP.Net MVCAttributeRoutes()”新增到啟用屬性路由,如下所示

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        //enabling attribute routing
        routes.MapASP.Net MVCAttributeRoutes();
        //convention-based routing
        routes.MapRoute
        (
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Customer", action = "GetCustomerList", id = UrlParameter.Optional }
        );
    }

JavaScript 物件表示法 (JSON) 繫結支援從 ASP.Net MVC3 開始透過新的 JsonValueProviderFactory 提供,該工廠允許操作方法以 JSON 格式接受和模型繫結資料。這在 Ajax 場景(如客戶端模板和需要將資料釋出回伺服器的資料繫結)中很有用。

依賴項解析器在 ASP.Net MVC3 中也已引入,它極大地簡化了在應用程式中使用依賴項注入。這使得解耦應用程式元件並使其更易於測試和更易於配置變得更容易和更有用。

ASP.Net MVC4 中的“BundleConfig.cs”用於透過捆綁和縮小系統註冊捆綁包。預設情況下添加了許多捆綁包,包括 jQuery 庫,如 jquery.validate、Modernizr 和預設 CSS 引用。

方法:“RegisterRoutes()”用於註冊將新增到 global.asax 檔案的“Application_Start()”方法中的路由,該方法在應用程式載入或啟動時觸發。

以下是 ASP.Net MVC 中使用的一些重要名稱空間:

  • System.Web.ASP.Net MVC
  • System.Web.ASP.Net MVC.Ajax
  • System.Web.ASP.Net MVC.Html
  • System.Web.ASP.Net MVC.Async

Viewdata 包含作為字典的鍵值對,它派生自類:“ViewDataDictionary”。在操作方法中,我們為 viewdata 設定值,在檢視中,透過型別轉換獲取值。

ViewBag 是 ViewData 的包裝器,它允許建立動態屬性。viewbag 相對於 viewdata 的優勢在於:在 ViewBag 中,不需要像 ViewData 中那樣對物件進行型別轉換。ViewBag 將利用在 4.0 版本中引入的動態關鍵字。但在使用 ViewBag 之前,我們必須記住 ViewBag 比 ViewData 慢。

TempData 與 ViewData 一樣,也是一個鍵值對。它派生自“TempDataDictionary”類。TempData 用於在兩個連續請求中使用資料時,這可能在操作之間或控制器之間。這需要在檢視中進行型別轉換。

HTML 幫助器就像傳統 Web 窗體中的控制元件。但是 HTML 幫助器比 Web 控制元件更輕量級,因為它不儲存檢視狀態和事件。HTML 幫助器返回 HTML 字串,該字串可以直接呈現到 HTML 頁面。還可以透過覆蓋“HtmlHelper”類來建立自定義 HTML 幫助器。

AJAX 幫助器用於建立啟用 AJAX 的元素,例如啟用 AJAX 的表單和連結,這些元素非同步執行請求,並且是存在於名稱空間 System.Web.ASP.Net MVC 中的 AJAXHelper 類的擴充套件方法。

以下是 AJAX 幫助器中的選項

  • Url:這是請求 URL。
  • Confirm:用於指定要在確認框中顯示的訊息。
  • OnBegin:此處給出 Javascript 方法名稱,將在 AJAX 請求之前呼叫。
  • OnComplete:此處給出 Javascript 方法名稱,將在 AJAX 請求結束時呼叫。
  • OnSuccess - 此處給出 Javascript 方法名稱,將在 AJAX 請求成功時呼叫。
  • OnFailure - 此處給出 Javascript 方法名稱,將在 AJAX 請求失敗時呼叫。
  • UpdateTargetId:從返回 HTML 的操作填充的目標元素。

佈局頁面類似於傳統 Web 窗體中的主頁面。它用於在多個頁面中設定通用外觀。在每個子頁面中,我們可以找到:/p>

@{
Layout = "~/Views/Shared/TestLayout1.cshtml";
}
這表示子頁面使用 TestLayout 頁面作為其主頁面。

節是要在佈局頁面中呈現的 HTML 部分。在佈局頁面中,我們將使用以下語法來呈現 HTML

@RenderSection("TestSection")
在子頁面中,我們定義這些節,如下所示
@section TestSection{
<h1>Test Content<h1>
}
如果任何子頁面沒有定義此節,則會丟擲錯誤,因此為了避免這種情況,我們可以這樣呈現 HTML
@RenderSection("TestSection", required: false)

RenderBody 就像 Web 窗體中的 ContentPlaceHolder。它將存在於佈局頁面中,並將呈現子頁面/檢視。佈局頁面將只有一個 RenderBody() 方法。RenderPage 也存在於佈局頁面中,佈局頁面中可以有多個 RenderPage()。

此頁面用於確保為多個檢視使用通用佈局頁面。載入應用程式時,將首先執行此檔案中編寫的程式碼。

以下是用於從操作呈現檢視的方法:

  • View():從操作返回檢視。
  • PartialView():從操作返回部分檢視。
  • RedirectToAction():重定向到不同的操作,該操作可以在同一個控制器中或不同的控制器中。
  • Redirect():類似於 webforms 中的“Response.Redirect()”,用於重定向到指定的 URL。
  • RedirectToRoute():從指定的 URL 重定向到操作,但已匹配路由表中的 URL。

ActionResult 用於表示操作方法的結果。以下是 ActionResult 的子型別

  • ViewResult
  • PartialViewResult
  • RedirectToRouteResult
  • RedirectResult
  • JavascriptResult
  • JSONResult
  • FileResult
  • HTTPStatusCodeResult

在 ASP.Net MVC 中,所有公共方法都被視為 Action。因此,如果您正在建立方法,並且不想將其用作 Action 方法,則必須使用“NonAction”特性進行修飾,如下所示

[NonAction]
public void TestMethod()
{
// Method logic
}

“ActionName”特性可用於更改 Action 名稱。下面是演示更多內容的示例程式碼片段

[ActionName("TestActionNew")]
public ActionResult TestAction()
    {
        return View();
    }
因此,在上面的程式碼片段中,“TestAction”是原始的 Action 名稱,在“ActionName”特性中,給出了名稱“TestActionNew”。因此,此 Action 方法的呼叫者將使用名稱“TestActionNew”來呼叫此 Action。

與計算併發送到響應的程式碼表達式不同,它是執行的程式碼塊。這對於宣告以後可能需要使用的變數很有用。

@{
 int x = 123;
 string y = "aa";
 }

HelperPage.IsAjax 屬性獲取一個值,該值指示在 Web 頁面請求期間是否正在使用 Ajax。

建立 JavaScript 方法

function DrpIndexChanged() { }
呼叫方法
< %:Html.DropDownListFor(x => x.SelectedProduct, new SelectList(Model.Customers, "Value", "Text"), "Please Select a Customer", new { id = "ddlCustomers", onchange=" DrpIndexChanged ()" })%>

資料特性是可以在“System.ComponentModel.DataAnnotations”名稱空間中找到的特性。這些特性將用於伺服器端驗證,並且也支援客戶端驗證。四個特性 - Required、StringLength、RegularExpression 和 Range 用於涵蓋常見的驗證場景。

此方法用於將指定的區域性檢視呈現為 HTML 字串。此方法不依賴於任何 Action 方法。我們可以像下面這樣使用它:@Html.Partial("TestPartialView")

方法的結果:“RenderPartial”直接寫入 HTML 響應。此方法不返回任何內容(void)。此方法也不依賴於 Action 方法。RenderPartial() 方法在內部呼叫“Write()”,我們必須確保“RenderPartial”方法包含在括號中。下面是示例程式碼片段:@ {Html.RenderPartial("TestPartialView");}

“RouteConfig.cs”儲存 ASP.Net MVC 的路由配置。RouteConfig 將在 Global.asax 中註冊的 Application_Start 事件上初始化。

ASP.NET ASP.Net MVC 中的腳手架用於生成控制器、模型和檢視,以在應用程式中建立、讀取、更新和刪除 (CRUD) 功能。腳手架將瞭解用於模型、控制器和檢視的命名約定。

以下是腳手架的型別

  • 建立
  • 刪除
  • 詳細資訊
  • 編輯
  • 列表

是的,我們可以跨多個控制器共享檢視。我們可以將檢視放在“Shared”資料夾中。當我們建立一個新的 ASP.Net MVC 專案時,我們可以看到佈局頁面將新增到共享資料夾中,這是因為它被多個子頁面使用。

  • 名稱 - 這是路由的名稱。
  • URL 模式:將提供佔位符以匹配請求 URL 模式。
  • 預設值:載入應用程式時,要載入哪個控制器、Action以及引數。

使用此預設路由 - {resource}.axd/{*pathInfo},我們可以防止對 Web 資原始檔(例如 WebResource.axd 或 ScriptResource.axd)的請求傳遞到控制器。

是的,我們可以透過以下方式在路由中新增約束

  • 使用正則表示式
  • 使用實現介面 IRouteConstraint 的物件。

以下是 Razor 檢視可以具有的兩種副檔名

  • .cshtml:在 C# 程式語言中將使用此副檔名。
  • .vbhtml - 在 VB 程式語言中將使用此副檔名。

PartialView 類似於傳統 Web 窗體中的使用者控制元件。出於可重用性目的,使用部分檢視。由於它已與多個檢視共享,因此它們儲存在共享資料夾中。部分檢視可以透過以下方式呈現

  • Html.Partial()
  • Html.RenderPartial()

以下是將 css 新增到 Razor 檢視的示例程式碼片段:< link rel="StyleSheet" href="/@Href(~Content/Site.css")" type="text/css"/>

不可以。我們無法在 Visual Studio Express 版本中新增測試用例,它只能在 Visual Studio 的專業版和旗艦版中新增。

Glimpse 是一個用於除錯 ASP.Net MVC 中路由的開源工具。它是客戶端偵錯程式。必須透過訪問本地 URL 連結來開啟 Glimpse - https://:portname//glimpse.axd 這是一個流行且有用的除錯工具,它跟蹤速度詳細資訊、URL 詳細資訊等。

動作過濾器允許我們在 Action 執行之前或之後執行程式碼。這可以透過使用 ASP.Net MVC 特性修飾控制器的 Action 方法來完成。

以下是使用的一些 Action 過濾器

  • 身份驗證
  • 授權
  • HandleError
  • OutputCache

可以透過以下方式完成:使用類:“HttpRequestBase”並使用方法:“HttpMethod”來確定 Action 請求型別。

每當驗證失敗時,它都會在 ModelState 中跟蹤。透過使用屬性:IsValid 可以確定。在伺服器程式碼中,這樣檢查

if(ModelState.IsValid){
     // No Validation Errors
}

在 Web.Config 中,有一些名為“ClientValidationEnabled”和“UnobtrusiveJavaScriptEnabled”的標記。我們可以透過將這兩個標記設定為“true”來設定客戶端驗證,然後此設定將應用於應用程式級別。

< add key="ClientValidationEnabled" value="true" />
< add key="UnobtrusiveJavaScriptEnabled" value="true" />

對於模型繫結,我們將使用名為“ModelBinders”的類,它允許訪問應用程式中的所有模型繫結器。我們可以透過繼承“IModelBinder”來建立自定義模型繫結器。

ASP.Net MVC 中的異常處理變得很簡單,只需重寫“OnException”並將 filtercontext 物件的結果屬性(如下所示)設定為要返回的檢視詳細資訊即可,以防出現異常。

protected overrides void OnException(ExceptionContext filterContext)
    {
    }

如果在當前請求中分配了 Tempdata,則它將對當前請求和後續請求可用,並且取決於是否讀取了 TempData 中的資料。如果讀取了 Tempdata 中的資料,則它將無法用於後續請求。

如上所述,如果 Tempdata 中的資料僅在當前請求中讀取,則使用“Keep”方法使其對後續請求可用。

@TempData["TestData"];
TempData.Keep("TestData");

與 Keep 方法類似,我們還有另一個名為“Peek”的方法用於相同目的。此方法用於讀取 Tempdata 中的資料,並將其保留以供後續請求使用。

string A4str = TempData.Peek("TT").ToString();

區域用於儲存專案模組的詳細資訊。這對於大型應用程式非常有用,在大型應用程式中,控制器、檢視和模型都位於主控制器、檢視和模型資料夾中,並且很難管理。

當我們建立了一個區域時,請確保它在 Global.asax 中的“Application_Start”事件中註冊。以下是執行區域註冊的程式碼片段

protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
}

為了建立可重用的視窗小部件,使用子 Action,它將嵌入到父檢視中。在 ASP.Net MVC 中,部分檢視用於在應用程式中實現可重用性。子 Action 主要返回部分檢視。

“ChildActionOnly”特性修飾 Action 方法以指示該 Action 方法是子 Action。以下是用於表示子 Action 的程式碼片段

[ChildActionOnly]
public ActionResult MenuBar()
{
//Logic here
return PartialView();
}

它是一種設計模式,用於開發松耦合程式碼。這在軟體專案中得到了廣泛的應用。這將減少在專案設計發生變化時所需的編碼工作,因此得到了廣泛的應用。

以下是 DI 的優點

  • 減少類耦合
  • 提高程式碼重用
  • 提高程式碼可維護性
  • 改進應用程式測試

TDD 是一種方法論,它說,在編寫程式碼之前先編寫測試。在 TDD 中,測試驅動應用程式設計和開發週期。在所有單元測試透過之前,您不會將程式碼簽入原始碼管理。

以下是用於單元測試的工具

  • NUnit
  • xUnit.NET
  • Ninject 2
  • Moq

REST 是一種架構風格,它使用 HTTP 協議方法(如 GET、POST、PUT 和 DELETE)來訪問資料。ASP.Net MVC 以這種方式工作。在 ASP.Net MVC 4 中,支援 Web API,它用於使用 HTTP 動詞構建服務。

我們可以在 ASP.Net MVC 中使用資料特性進行驗證。如果我們想在執行時使用 Jquery 進行驗證,那麼我們可以使用 Jquery 外掛進行驗證。例如:如果要對客戶姓名文字框進行驗證,則可以執行以下操作

$('#CustomerName').rules("add", {
required: true,
minlength: 2,
messages: {
required: "Please enter name",
minlength: "Minimum length is 2"
}
});

以下是解決多個提交按鈕問題的場景和解決方案。場景

@using (Html.BeginForm("MyTestAction","MyTestController")
{
    <input type="submit" value="MySave" />
    <input type="submit" value="MyEdit" />
}
解決方案
Public ActionResult MyTestAction(string submit) //submit will have value either "MySave" or "MyEdit"
{
    // Write code here
}

  • 顯示模板:這些是模型中心的。這意味著它取決於所使用的檢視模型的屬性。它使用約定,該約定僅顯示 div 或標籤。
  • 編輯模板:這些也是模型中心的,但將具有可編輯的控制元件,如文字框。
  • 部分檢視:這些是檢視中心的。它們在呈現屬性 (Id) 的方式上與模板不同。例如:CategoryViewModel 具有 Product 類屬性,則它將呈現為 Model.Product.ProductName,但在模板的情況下,如果 CategoryViewModel 具有 List然後 @Html.DisplayFor(m => m.Products) 工作,它為該列表的每個專案呈現模板。

不可以。我們不能為屬性 maxJsonLength 設定無限長度。預設值為 - 102400,我們可以設定的最大值為:2147483644。

可以。我們可以在 cshtml 中使用 <text> 元素在 javascript 中使用 Razor 程式碼。

< script type="text/javascript">
@foreach (var item in Model) {
< text >
//javascript goes here which uses the server values
< text >
}
< script>

以下是從 Action 方法返回字串的程式碼片段

public ActionResult TestAction() {
return Content("Hello Test !!");
}

以下是從 Action 方法返回字串的程式碼片段

public ActionResult TestAction() {
return JSON(new { prop1 = "Test1", prop2 = "Test2" });
}

下一步是什麼?

此外,你可以回顧一下你之前做過與該主題相關的作業,並確保你能自信地談論它們。如果你是應屆畢業生,面試官不會期望你回答非常複雜的問題,而是希望你的基礎概念非常紮實。

其次,如果你無法回答一些問題,其實並不太重要,重要的是,你回答的任何問題,都必須充滿自信。所以在面試過程中要保持自信。Tutorialspoint祝你面試順利,並祝你在未來的工作中一切順利。乾杯:-)

mvc_framework_questions_answers.htm
廣告