91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中模型、視圖和控制器的示例分析

發布時間:2021-09-09 16:53:39 來源:億速云 閱讀:161 作者:小新 欄目:編程語言

這篇文章主要介紹C#中模型、視圖和控制器的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

 示例 ASP.NET MVC 應用程序

  用以創建ASP.NET MVC Web程序的默認的 Visual Studio 模板包括一個極其簡單的示例程序,可以用來理解ASP.NET MVC Web程序的不同部分。我們在這個教程里就利用這個簡單程序吧。

  運行Visual Studio 2008, 選擇“文件”,“新建”(見圖1),用MVC模板創建ASP.NET MVC程序。在“新建項目”對話框中,在“項目類型(P)”(Visual Basic 或者C#)中選擇你喜歡的編程語言,并在“模板”下選擇 ASP.NET MVC Web Application 。點擊“確定”按鈕。

C#中模型、視圖和控制器的示例分析
圖1 新建項目對話框

  創建完新的 ASP.NET MVC 程序后, 出現Create Unit Test Project 對話框(見圖2). 這個對話框會在解決方案中為你創建一個單獨的用來測試你的ASP.NET MVC程序的項目。選擇選項 No, do not create a unit test project 并單擊 OK 按鈕。

C#中模型、視圖和控制器的示例分析
圖2 創建單元測試對話框

  ASP.NET MVC 程序創建完成。你會在解決方案資源管理器窗口中看到幾個文件夾和文件。特別是你會看到三個分別名為Models,Views和Controllers的文件夾。顧名思義,這三個文件夾包含了實現模型,視圖和控制器的文件。

  如果你展開Controllers文件夾,你會看到一個名為AccountController.cs和一個名為HomeControllers.cs的文件。展開Views文件夾,會看到三個分別名為Account,Home和Shared的子文件夾。展開Home文件夾,會看到兩個分別名為About.aspx和Index.aspx的文件(見圖3)。這些文件組成了包括默認ASP.NET MVC模板的示例程序。

C#中模型、視圖和控制器的示例分析
圖3 解決方案資源管理器窗口

  選擇“調試”,“啟動調試”運行示例程序。或者按F5鍵也可以。

  第一次運行 ASP.NET 程序時,會出現圖4所示的對話框,建議你啟動調試。 點擊“確定”按鈕程序就會運行起來了。

C#中模型、視圖和控制器的示例分析
圖4 調試未啟動對話框

  運行ASP.NET MVC 程序時, Visual Studio 會在瀏覽器運行你的程序。示例程序包括2個頁面:Index頁和About頁。程序首次啟動時,出現Index頁(見圖5)。你可以點擊程序右上方的菜單鏈接導航到About頁。

C#中模型、視圖和控制器的示例分析
圖5 Index 頁

  注意瀏覽器地址欄的URL,當點擊About菜單鏈接時,地址欄中的URL變為 /Home/About。

  關閉瀏覽器窗口回到 Visual Studio,你找不到路徑Home/About的文件。這個文件不存在,這怎么可能呢?

 一個URL不等于一個頁

  生成傳統的ASP.NEW Web窗體程序或ASP程序時,一個URL對應一個網頁。如果向服務器一個名為 SomePage.aspx的頁面發起請求 ,那么磁盤里最好存在這么一個名為SomePage.aspx的頁面。如果 SomePage.aspx 文件不存在,將會得到一個丑陋的 404 – Page Not Found 錯誤。

  相反,生成 ASP.NET MVC 程序時,在你輸入瀏覽器地址的URL和你要在程序里找的文件之間并沒有對應關系。在

  ASP.NET MVC 程序中, 一個URL并不對應磁盤上的頁而是對應一個控制器action。

  在傳統 ASP.NET 或者 ASP 程序中, 瀏覽器請求被映射到頁面。相反,在 ASP.NET MVC 程序中, 瀏覽器請求被映射到控制器action。 ASP.NET Web 窗體程序以內容為中心。 相反,ASP.NET MVC 程序以程序邏輯為中心。

 理解ASP.NET Routing

  瀏覽器請求通過一個名為 ASP.NET Routing 的ASP.NET 框架特性來獲得控制器action的映射。 ASP.NET Routing 被 ASP.NET MVC 框架用來對傳入控制器action的請求進行路由。

  ASP.NET Routing 用一個路由表來處理傳入的請求。當web程序第一次運行時這個路由表就會被創建。 它是在 Global.asax 文件中被創建的。默認的 MVC Global.asax 文件如代碼1所示。

 代碼1 – Global.asax

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace MvcApplication1
{
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit http://go.microsoft.com/?LinkId=9394801

    public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default",                                              // Route name
                "{controller}/{action}/{id}",                           // URL with parameters
                new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
            );
        }

        protected void Application_Start()
        {
            RegisterRoutes(RouteTable.Routes);
        }
    }
}

  ASP.NET 程序首次啟動時, Application_Start() 方法會被調用。 在代碼 1中, 此方法調用 RegisterRoutes() 方法創建默認路由表。

  默認路由表只包括一個路由。這個默認的路由將傳入的請求分為三段(一個URL段就是兩個斜杠間的任何東西)。第一段映射到控制器名,第二段映射到action名,最后一段映射到一個傳到action的名為Id的參數。

  例如,考慮以下URL:

  /Product/Details/3

  這個 URL 被解析為類似這樣的3個參數:

  Controller = Product

  Action = Details

  Id = 3

  Global.asax 文件中定義的默認路由包括所有三個參數的默認值。默認的控制器是 Home, 默認的 Action 是 Index, 默認的 Id 是空字符串。心里想著這些默認值,思考一下下面的URL是怎么解析的:

  /Employee

  這個 URL 被解析成類似這樣的三個參數:

  Controller = Employee

  Action = Index

  Id =

  最后,如果你不輸入任何URL(例如,http://localhost)就打開 ASP.NET MVC 程序的話URL就像這樣解析:

  Controller = Home

  Action = Index

  Id =

  這個請求就被路由到HomeController類的 Index() action 中。

 理解控制器

  控制器負責控制用戶與MVC程序交互的方式。控制器包括了ASP.NET MVC程序的流控制邏輯。控制器決定當用戶發送一個瀏覽器請求時返回什么響應。控制器就是一個類(例如,一個Visual Basic或者C#類)。樣例 ASP.NET MVC 程序包括一個位于Controllers文件夾中名為 HomeController.cs 的控制器。 HomeController.cs 文件內容轉載在代碼 2中。

 代碼 2 – HomeController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewData["Title"] = "Home Page";
            ViewData["Message"] = "Welcome to ASP.NET MVC!";

            return View();
        }

        public ActionResult About()
        {
            ViewData["Title"] = "About Page";

            return View();
        }
    }
}

  注意 HomeController 有兩個方法,名為Index() 和About().。這兩個方法對應由控制器暴露的兩個action。 URL /Home/Index 調用 HomeController.Index() 方法而URL/ Home/ About 調用 HomeController.About() 方法。

  控制器中的任何公共方法都被暴露為控制器action。對此你要特別小心。這意味著人們只要通過訪問互聯網,在瀏覽器中輸入正確的URL,就可以調用控制器中的任何公共方法。

 理解視圖

  由HomeController暴露的 Index() 和About() 這兩個action都返回一個視圖。視圖包括HTML標記和發送到瀏覽器的內容。在ASP.NET MVC程序中視圖等同于一個頁面。你必須在正確的地方創建視圖。HomeController.Index() action 返回一個位于以下路徑的視圖:

  /Views/Home/Index.aspx

  HomeController.About() action 返回一個位于以下路徑的視圖:

  /Views/Home/About.aspx

  通常,如果你想為控制器action返回視圖,那么你需要在Views文件夾下創建一個與控制器同名的子文件夾。在此子文件夾內,你得創建一個與控制器action同名的 .aspx 文件。

  代碼3 中的文件包含 About.aspx 視圖。

  代碼3 – About.aspx

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

<asp:Content ID="aboutContent" ContentPlaceHolderID="MainContent" runat="server">
    <h3>About</h3>
    <p>
        Put content here.
    </p>
</asp:Content>

  如果你忽略代碼3的第一行,視圖的其余部分包含了標準的HTML。你可以輸入任何你想要的HTML來修改視圖的內容。

  視圖和ASP或ASP.NET Web窗體中的頁面很相似。視圖可以包含HTML內容和腳本。你可以用你喜歡的編程語言寫腳本(例如,C#或Visual Basic .NET)。使用腳本來顯示動態內容,例如數據庫數據。

 理解模型

  我們已經討論了控制器和視圖。最后一個話題就是模型了。什么是MVC模型?

  MVC 模型包含程序中的所有邏輯,而這些邏輯并不包含在視圖或控制器中。模型應該包含所有程序業務邏輯,驗證邏輯和數據庫訪問邏輯。例如,如果你用 Microsoft Entity Framework 來訪問數據庫,那么你要在Models文件夾中創建 Entity Framework 類 ( .edmx 文件) 。

  視圖應該僅僅包含生成用戶界面的邏輯。控制器應該僅僅包含返回正確視圖的最小邏輯或者將用戶重定向到其他action(流控制)。其它的任何事情都應該包含在模型中。

  通常,你應該為“胖”模型和“瘦”控制器而努力。控制器方法應該只包含幾行代碼。如果控制器action變得太“胖”的話,那么就應該考慮將邏輯挪出到Models文件夾中的一個新類中。

以上是“C#中模型、視圖和控制器的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

裕民县| 寻甸| 壤塘县| 文昌市| 兴化市| 星子县| 连南| 宜都市| 博白县| 海原县| 巨鹿县| 建平县| 旌德县| 黑龙江省| 仪征市| 浙江省| 山阴县| 西吉县| 久治县| 桑日县| 金乡县| 陈巴尔虎旗| 姚安县| 稷山县| 德州市| 陇南市| 新巴尔虎右旗| 靖宇县| 郑州市| 元朗区| 淄博市| 阿坝| 蛟河市| 萍乡市| 阳江市| 揭东县| 论坛| 石楼县| 吴忠市| 鄂伦春自治旗| 南投县|