MVC-controller隨筆

来源:http://www.cnblogs.com/MVC1013/archive/2016/10/13/5956496.html
-Advertisement-
Play Games

初識MVC-controller隨筆 之前用的一些其他框架,也沒有系統性的學習MVC框架。最近才開始接觸,給大家簡單的分享一下經驗。 1 MVC的核心就是Controller(控制器),它負責處理瀏覽器傳送過來的所有請求,並決定要將什麼內容響應給瀏覽器。但Controller並不負責決定內容應該如何 ...


 初識MVC-controller隨筆

 

 

 

 

 

 

 

 

 

 

 

之前用的一些其他框架,也沒有系統性的學習MVC框架。最近才開始接觸,給大家簡單的分享一下經驗。

1    MVC的核心就是Controller(控制器),它負責處理瀏覽器傳送過來的所有請求,並決定要將什麼內容響應給瀏覽器。但Controller並不負責決定內容應該如何顯示,而是將特定形態的內容響應給MVC架構,最後才由MVC架構依據響應的形態來決定如何將內容響應給瀏覽器。如何決定響應內容是View的責任。

2   Controller本身就是一個類(Class),該類有許多方法(Method)。在這些方法中,只要是公開方法,該方法就會被視為是一種動作(Action);只要有動作存在,就可以通過該動作方法接收網頁請求並決定響應視圖。

3   使用controller時應滿足的條件

  • Controller必須為公開類
  • Controller的名稱必須以"Controller"結尾
  • 必須繼承自MVC內置的Controller類,或繼承自實現IController介面的自定義類,或自行實現IController介面。
  • 所有方法必須為公開方法。該方法可以沒有參數,也可以有多個參數。

4 controller的執行過程

   Controller被MvcHandler選中之後,下一步就是通過ActionInvoker選取適當的Action來執行。在Controller中,每一個Action可以定義0到多個參數。ActionInvoke會依據當前的RouteValue及客戶端傳過來的信息準備好可輸入Action參數的依據,最後正式調用被Controller選中的那個Action方法。Action執行完後的返回值通常是ActionResult類的。事實上,ActionResult類是一個抽象類,因此,MVC本身就實現了許多不同ActionResult類的子類。Controller得到ActionResult類之後,就會開始執行ActionResult類的ExecuteResult()方法,並將執行的結果返回客戶端。這時,Controller的任務就算完成了。

5 action動作名稱選取器

      通過ActionInvoker選取Controller中的公開方法時預設會執行Index()方法。

  如果Action中加入ActionName屬性,並將其指名為"Default",此時,若RouteValue表達式中的Action是"Index",就不會執行Index()方法,而必須使RouteValue表達式中的Action為"Default",Index()方法才能被正確執行,這就是動作名稱選取器(Action Name Selector)的作用,示例如下。

1   public class HomeController : Controller
 2     {
 3         /// <summary>
 4         /// 要求網址 http://localhost/Home/Index
 5         /// </summary>
 6         [ActionName("Default")]
 7         public ActionResult Index()
 8         {           
 9             return View();
10         }
11 
12     }

 唯一需要特別註意的是,如果你使用預設的"return View()"方法返回ActionResult類,由於應用了[ActionName("Default")]屬性,所以MVC會去尋找"/Views/Home/Default.aspx"頁面而不是"/Views/Home/Index.aspx"頁面來執行。

6 動作方法選取器

    6.1  NonAction屬性

    若將NonAction屬性應用在Controller中的Action方法上,即便該Action方法是公開方法,也會告知ActionInvoke不要選取這個Action來執行。這個屬性主要用來保護Controller中的特定公開方法不會被髮布到Web上。或是當功能尚未開發完成就要進行部署時,若暫時不想將此方法刪除,也可應用這個屬性,表示"不要對外公開"。

  [NonAction]
        public ActionResult Index()
         {
           return View();
         }

 將Action方法中的"public"修改成"privare",也可以達到同樣的目的

 6.2  HttpGet屬性、HttpPost屬性、HttpDelete屬性和HttpPut屬性

  HttpGet、HttpPost、HttpDelete和HttpPut屬性是動作方法選取器的一部分,我們以下列程式為例進行介紹。若應用了[httpPost]屬性,表示只有當客戶端瀏覽器發送HTTP POST請求時才可以選取這個Action。  

 [HttpPost]
2         private ActionResult Index()
3         {
4             return View();
5         }

  相反的,若果沒有應用這些屬性,客戶端瀏覽器發送任何HTTP動詞,都會自動選取對應的Action。

 這些屬性常用在需要接受視窗數據的時候。你可以創建兩個同名的Action,一個應用[HttpGet]屬性來顯示視窗HTML,另一個應用[HttpPost]屬性來接收視窗送出的值,

7 ActionResult類

 ActionResult類是Action執行的結果,但ActionResult中並不包含執行結果,而是包含執行響應時所需的信息。當Action返回ActionResult類之後,會由MVC執行。先看看ActionResult抽象類的程式代碼。在ActionResult抽象類中僅定義了一個ExecuteResult()方法來執行結果

MVC定義的ActionResult如表所示:

 表中的Controller輔助方法在Controller類中為返回ActionResult類提供支持,如下程式可用於跳轉到另一個頁面。

1      [HttpPost]
2         public ActionResult Post(FormCollection c)
3         {
4             return new RedirectResult("/");
5         }

到此本文結束,如果還有什麼疑問或者建議,可以多多交流,原創文章,文筆有限,才疏學淺,文中若有不正之處,萬望告知。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近接手些mysql資料庫維護,發現mysql在批量操作方面就是個渣渣啊,比起MS SQL SERVER簡直就是“不可同日而語”。 咨詢了下MySQL的高手,對於數據遷移這種問題,一種處理方式就是直接“一步到位” ,一次性將所有數據查詢插入到另外一個表,然後再刪除原表數據;另外一種處理方式就是使用p ...
  • 最近做項目在部署到阿裡雲伺服器上之後出現了兩個問題: 1、亂碼問題。 2、ajax的php處理頁面裡面利用json_encode()函數返回json數據,則資料庫返回的數據只能是UTF8,如果是gbk則json也無法返回。 發現是資料庫編碼格式問題,網站使用的編碼格式為UTF8,資料庫的編碼格式調為 ...
  • 下麵,主要是驗證在MySQL主從複製環境下,存儲過程,函數,觸發器,事件的複製情況,這些確實會讓人混淆。 首先,創建一張測試表 存儲過程 創建存儲過程 通過查看二進位日誌,可以看到該DDL語句已被記錄 執行存儲過程 查看二進位日誌中,記錄的是還是call p1('tom',10)操作記錄對應的SQL ...
  • 1.出錯結果:資料庫表視圖有多條數據,在使用EF框架進行查詢時卻只得到一條數據(註:攔截EF得到的sql語句在資料庫進行查詢並沒有任務問題)。 2.出錯原因:該視圖中沒有ID或者主鍵,EF查詢時進行反射預設都是同一條數據。 3.總結:EF框架查詢視圖時需要註意加入ID或者主鍵 以上僅是個人簡單分析。 ...
  • 求迷宮從入口到出口的所有路徑是一個經典的程式設計問題,求解迷宮,通常採用的是“窮舉+回溯”的思想,即從入口開始,順著某一個方向出發,若能夠走通,就繼續往前走;若不能走通,則退回原路,換一個方向繼續向前探索,直到所有的通路都探尋為止。因此本文依據這種“窮舉+回溯”的思想,設計一個求解迷宮的程式。 1 ...
  • 當初說這個需求的時候,在網上找了一點資料,但是基本上感覺不符合項目中的需求。參照牛人的項目,和同事的改造,終於是像點樣子了 截圖大致截為3個像素,每個像素使用的地方也不同,考慮圖片不會是很多,分別壓縮保存下來。 根據截取的像素位置,對應的壓縮成相應的圖片: 首先需要下載Jcrop.js與upload ...
  • 最近寫代碼,遇到一個問題,微軟基於List<T>自帶的方法是public bool Remove(T item);,可是有時候我們可能會用到諸如RemoveAll<IEnumerable<T>>的方法,坦白的說,就是傳入的參數是一個IEnumerable<T>,而不是一個T,這種情景是隨時可能用到的 ...
  • 使用C#處理基於比特流的數據 0x00 起因 最近需要處理一些基於比特流的數據,電腦處理數據一般都是以byte(8bit)為單位的,使用BinaryReader讀取的數據也是如此,即使讀取bool型也是一個byte。不過藉助於C#基礎類庫中提供的一些方法,也實現了對基於比特的數據的讀取。任務完成後 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...