九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
ASP.NET MVC 應(yīng)用程序中的控制器和操作方法

ASP.NET MVC 框架可將 URL 映射到稱為“controller”的類(lèi)。 控制器將處理傳入的請(qǐng)求,處理用戶輸入和交互,并執(zhí)行相應(yīng)的應(yīng)用程序邏輯。 Controller 類(lèi)通常會(huì)調(diào)用單獨(dú)的視圖組件以為請(qǐng)求生成 HTML 標(biāo)記。

適用于所有控制器的基類(lèi)為 ControllerBase 類(lèi),該類(lèi)可進(jìn)行普通的 MVC 處理。 Controller 類(lèi)從 ControllerBase 中繼承并且是控制器的默認(rèn)實(shí)現(xiàn)。 Controller 類(lèi)負(fù)責(zé)以下處理階段的工作:

  • 查找要調(diào)用的相應(yīng)操作方法,并驗(yàn)證是否可以調(diào)用該方法。

  • 獲取要用作操作方法的參數(shù)的值。

  • 處理在執(zhí)行操作方法期間可能發(fā)生的所有錯(cuò)誤。

  • 提供用于呈現(xiàn) ASP.NET 頁(yè)面類(lèi)型(視圖)的默認(rèn) WebFormViewEngine 類(lèi)。

    注意

    為了幫助安全訪問(wèn)控制器和操作方法,您可以使用 AuthorizeAttribute 類(lèi)。

所有 controller 類(lèi)都必須使用“Controller”后綴來(lái)命名。 下面的示例演示了名為 HomeController 的 controller 類(lèi)的示例。 此 controller 類(lèi)包含呈現(xiàn)視圖頁(yè)的操作方法。

[HandleError]public class HomeController : Controller{    public ActionResult Index()    {        ViewData["Message"] = "Welcome to ASP.NET MVC!";        return View();    }    public ActionResult About()    {        return View();    }}

在未使用 MVC 框架的 ASP.NET 應(yīng)用程序中,用戶交互通常圍繞以下方面來(lái)組織:頁(yè)面、由頁(yè)面和頁(yè)面控件引發(fā)的事件,以及處理頁(yè)面和頁(yè)面控件引發(fā)的事件。 相比之下,在 ASP.NET MVC 應(yīng)用程序中,用戶交互圍繞控制器和操作方法進(jìn)行組織。 控制器定義操作方法。 控制器可根據(jù)需要包括多個(gè)操作方法。

操作方法與用戶交互之間通常具有一對(duì)一映射關(guān)系。 例如,用戶交互包括將 URL 輸入到瀏覽器中、單擊鏈接以及提交表單。 這些用戶交互中的每一項(xiàng)都會(huì)將請(qǐng)求發(fā)送給服務(wù)器。 在每種情況下,請(qǐng)求的 URL 均包含 MVC 框架用于調(diào)用操作方法的信息。

當(dāng)用戶將 URL 輸入到瀏覽器中時(shí),MVC 應(yīng)用程序會(huì)使用 Global.asax 文件中定義的路由規(guī)則來(lái)分析 URL 并確定控制器的路徑。 然后,該控制器會(huì)確定合適的操作方法來(lái)處理請(qǐng)求。 默認(rèn)情況下,請(qǐng)求的 URL 被視為一個(gè)子路徑,該子路徑包含后面跟有操作名稱的控制器名稱。 例如,如果用戶輸入 URL http://contoso.com/MyWebSite/Products/Categories,則子路徑為 /Products/Categories。 默認(rèn)的路由規(guī)則將“Products”視為控制器的前綴名稱,該名稱必須以“Controller”結(jié)束(如 ProductsController)。 它將“Categories”視為操作的名稱。 因此,該路由規(guī)則將調(diào)用 Products 控制器的 Categories 方法來(lái)處理請(qǐng)求。 如果 URL 以 /Products/Detail/5 結(jié)尾,則默認(rèn)的路由規(guī)則將“Detail”視為操作的名稱,并且調(diào)用 Products 控制器的 Detail 方法來(lái)處理請(qǐng)求。 默認(rèn)情況下,此 URL 中的值“5”將作為參數(shù)傳遞給 Detail 方法。

下面的示例演示了一個(gè)具有 HelloWorld 操作方法的控制器類(lèi)。

public class MyController : Controller{    public ActionResult HelloWorld()    {        ViewData["Message"] = "Hello World!";        return View();    }}

大多數(shù)操作方法會(huì)返回從 ActionResult 中派生的類(lèi)的實(shí)例。 ActionResult 類(lèi)是所有操作結(jié)果的基礎(chǔ)。 不過(guò),也存在不同的操作結(jié)果類(lèi)型,具體取決于操作方法執(zhí)行的任務(wù)。 例如,最常見(jiàn)的操作是調(diào)用 View 方法。 View 方法返回從 ActionResult 中派生的 ViewResult 類(lèi)的實(shí)例。

您可以創(chuàng)建返回任意類(lèi)型(如字符串、整數(shù)或布爾值)的對(duì)象的操作方法。 這些返回類(lèi)型在呈現(xiàn)到響應(yīng)流之前包裝在合適的 ActionResult 類(lèi)型中。

下表顯示了內(nèi)置操作結(jié)果類(lèi)型以及返回這些類(lèi)型的操作幫助器方法。

操作結(jié)果

幫助器方法

說(shuō)明

ViewResult

View

將視圖呈現(xiàn)為網(wǎng)頁(yè)。

PartialViewResult

PartialView

呈現(xiàn)分部視圖,該分部視圖定義可呈現(xiàn)在另一視圖內(nèi)的某視圖的一部分。

RedirectResult

Redirect

使用其 URL 重定向到另一操作方法。

RedirectToRouteResult

RedirectToAction

RedirectToRoute

重定向到另一操作方法。

ContentResult

Content

返回用戶定義的內(nèi)容類(lèi)型。

JsonResult

Json

返回序列化的 JSON 對(duì)象。

JavaScriptResult

JavaScript

返回可在客戶端上執(zhí)行的腳本。

FileResult

File

返回要寫(xiě)入響應(yīng)中的二進(jìn)制輸出。

EmptyResult

(無(wú))

表示在操作方法必須返回 null 結(jié)果 (void) 的情況下所使用的返回值。

默認(rèn)情況下,MVC 框架將 controller 類(lèi)的所有公共方法都視為操作方法。 如果您的 controller 類(lèi)包含公共方法,并且您不希望它成為操作方法,則必須用 NonActionAttribute 特性標(biāo)記該方法。

下面的示例演示用 NonAction 特性標(biāo)記的方法。

[NonAction]private void DoSomething(){    // Method logic.}

默認(rèn)情況下,操作方法參數(shù)的值是從請(qǐng)求的數(shù)據(jù)收集中檢索到的。 數(shù)據(jù)收集包括窗體數(shù)據(jù)名稱-數(shù)值對(duì)、查詢字符串值和 cookie 值。

Controller 類(lèi)將查找操作方法并根據(jù) RouteData 實(shí)例和窗體數(shù)據(jù)確定該操作方法的所有參數(shù)值。 如果無(wú)法分析參數(shù)值,并且參數(shù)類(lèi)型為引用類(lèi)型或可以為 null 值的類(lèi)型,則 null 將作為參數(shù)值傳遞。 否則會(huì)引發(fā)異常。

可以采用多種方法訪問(wèn) controller 類(lèi)操作方法中的 URL 參數(shù)值。 Controller 類(lèi)將公開(kāi)可在操作方法中訪問(wèn)的 RequestResponse 屬性。 這些屬性與已為 ASP.NET 的一部分的 HttpRequestHttpResponse 對(duì)象具有相同的語(yǔ)義。 但是,Controller 類(lèi)的 RequestResponse 對(duì)象將接受實(shí)現(xiàn) HttpRequestBaseHttpResponseBase 抽象類(lèi)(而不是成為密封類(lèi))的對(duì)象。 通過(guò)使用這些基類(lèi),可以輕松地創(chuàng)建 mock 對(duì)象,這樣,又可以輕松地為 controller 類(lèi)創(chuàng)建單元測(cè)試。

下面的示例演示如何使用 Request 對(duì)象檢索名為 id 的查詢字符串值。

public void Detail(){    int id = Convert.ToInt32(Request["id"]);}

ASP.NET MVC 框架可以將 URL 參數(shù)值自動(dòng)映射到操作方法的參數(shù)值。 默認(rèn)情況下,如果操作方法采用參數(shù),則 MVC 框架將檢查傳入的請(qǐng)求數(shù)據(jù)并確定該請(qǐng)求是否包含同名的 HTTP 請(qǐng)求值。 如果包含,則該請(qǐng)求值將自動(dòng)傳遞給操作方法。

下面的示例演示上面示例的變體。 在此變體中,假定 id 參數(shù)映射到名稱也為 id 的請(qǐng)求值。 由于此自動(dòng)映射的緣故,操作方法不必包括用于從請(qǐng)求中獲取參數(shù)值的代碼,因此,參數(shù)值更易于使用。

public ResultAction Detail(int id){    ViewData["DetailInfo"] = id;    return View();}

您也可以將參數(shù)值作為 URL 的一部分而不是作為查詢字符串值嵌入。 例如,您可以使用 /Products/Detail/3 之類(lèi)的 URL,而不是使用包含查詢字符串的 URL,如 /Products/Detail?id=3 默認(rèn)路由映射規(guī)則的格式為 /{controller}/{action}/{id}。 如果 URL 中控制器和操作名稱后面存在 URL 子路徑,則會(huì)將該子路徑視為名為 id 的參數(shù),并自動(dòng)將其作為參數(shù)值傳遞給操作方法。

MVC 框架還支持操作方法的可選參數(shù)。 MVC 框架中的可選形參是使用控制器操作方法的可以為 null 類(lèi)型的實(shí)參處理的。 例如,如果方法可以采用日期作為查詢字符串的一部分,但是您希望在缺少查詢字符串參數(shù)的情況下默認(rèn)值為當(dāng)天日期,則可以使用與以下示例中的代碼相似的代碼:

public ActionResult ShowArticles(DateTime? date){    if(!date.HasValue)    {        date = DateTime.Now;    }    // ...}

如果請(qǐng)求包括日期參數(shù)的值,則該值將傳遞給 ShowArticles 方法。 如果請(qǐng)求不包含此形參的值,則實(shí)參為 null,并且控制器可以采用所需的任何操作以處理缺少的形參。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
WebApi 路由機(jī)制剖析:你準(zhǔn)備好了嗎?(上)
ASP.NET MVC 5 學(xué)習(xí)教程:添加控制器
ASP.NET MVC3-第02節(jié)-添加一個(gè)Controller (C#)
ASP.NET MVC5基礎(chǔ)-控制器(Controller)詳解
學(xué)習(xí) ASP.NET MVC (第三回)實(shí)戰(zhàn)篇
ASP.NET Core 3.0中使用動(dòng)態(tài)控制器路由
更多類(lèi)似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服