1. 程式人生 > >【ASP.NET】MVC5 + EF6(三)

【ASP.NET】MVC5 + EF6(三)

MVC框架內容解析

一、流程說明

一個MVC專案是由M-Model-模型、V-View-檢視、C-Controller-控制器這三部分組成。關係圖如下所示 在這裡插入圖片描述 說明: 1.使用者發起的請求首先會到達控制器Controller。它可以處理瀏覽器發來的請求,從模型(Model)中獲取資料,然後將處理後的資料通過檢視(View)傳送給瀏覽器。 2.Controllers資料夾用來存放所有控制器。這個不是強制規定,但是這是約定俗成的習慣。 3.控制器裡的方法叫做動作(Action),這裡的控制器就包含了一個叫做Index的Action。這個Action可以向瀏覽器傳送一個字串,瀏覽器會顯示這個字串。

二、路由控制和頁面呼叫流程

2.1 通過路由來訪問控制器及其Action

怎麼寫url能訪問到我想要訪問的控制器呢? 要想正確訪問路由器,就得知道路由規則。它被寫在解決方案的App_Start資料夾下的RoutConfig.cs檔案中。顧名思義,這是路由配置檔案。 在這裡插入圖片描述

程式碼中黃色標記出的兩行就是路由規則的關鍵所在。 第一行的意思是通過 “http://主機名:埠號/控制器名/Action名/引數id” 可以呼叫這個控制器的Action並且這個Action帶有引數id。

2.2 頁面的呼叫流程:

瀏覽器通過url: “http://主機名:埠號/控制器名/Action名/引數id” 發出請求。由RouteConfig.cs解析路由,匹配規則url: “{controller}/{action}/{id}”,得出要訪問Controller下的Index Action。然後Index Action返回一個View,其對應的View是在Views資料夾下的某個資料夾裡的Index.cshtml檔案。此檔案又載入"~/Views/Shared/_Layout.cshtml"模板,渲染頁面後返回瀏覽器,顯示頁面中的內容。

三、ViewBag

如果View不接受任何引數,那麼這個頁面只能是一個靜態頁面。想要在Controller呼叫View時向其傳遞引數,就要用到ViewBag。 ViewBag是一個很神奇的東西,它是一個動態物件。簡單點說就是你可以給它新增任何屬性,這個屬性可以是任何型別。 ViewBag的主要用途就是在Controller裡給ViewBag新增屬性值,並在View中讀取這些值並顯示出來。

HomeController.cs檔案內容:

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

namespace EFDemo1.Controllers
{
    public class HomeController : Controller
    {
       public ActionResult Contact()
        {
            ViewBag.Message = "Your contact page.";

            return View();
        }
    }
}

與HomeController.cs檔案對應的views/Home/Contact.cshtml檔案內容:

@{
    ViewBag.Title = "Contact";
}
<h2>@ViewBag.Title.</h2>
<h3>@ViewBag.Message</h3>

四、Razor

4.1Razor是什麼?

  • MVC中view檔案的字尾名都是.cshtml。這是什麼檔案呢?顧名思義,cshtml = cs + html,就是一個包含C Sharp(C#)程式碼的HTML檔案。 既然檔案包含原本HTML檔案裡的客戶端程式碼和C#這樣的伺服器端程式碼,我們就得想個辦法區分這兩種程式碼。這裡我們就需要Razor。
  • Razor 是一種允許向網頁中嵌入基於伺服器的程式碼(Visual Basic 和 C#)的標記語言(語法)。 當網頁被寫入瀏覽器時,基於伺服器的程式碼能夠建立動態內容。在網頁載入時,伺服器在向瀏覽器返回頁面之前,會執行頁面內的基於伺服器程式碼。由於是在伺服器上執行,這種程式碼能執行復雜的任務,比如訪問資料庫等。
  • Razor 基於 ASP.NET,它為 web 應用程式的建立而設計。它擁有傳統 ASP.NET 標記的能力。

4.2 C# 的主要 Razor 語法規則

  • Razor 程式碼封裝於 @{ … } 中
  • 行內表示式(變數和函式)以 @ 開頭
  • 程式碼語句以分號結尾
  • 字串由引號包圍
  • C# 程式碼對大小寫敏感
  • C# 檔案的副檔名是 .cshtml
例項
<!-- 單行程式碼塊 -->
@{ var myMessage =	"Hello World"; }

<!-- 行內表示式或變數 -->
<p>The value of myMessage is: @myMessage</p> 

<!-- 多行語句程式碼塊 -->
@{
var greeting = "Welcome to our site!";
var weekDay = DateTime.Now.DayOfWeek;
var greetingMessage = greeting + " Here in Huston it is: " + weekDay;
}
<p>The greeting is: @greetingMessage</p>

4.3 Razor的註釋

4.3.1 Razor的的多行註釋 @*註釋內容*@。
@*{
var greeting = "Welcome to our site!";
var weekDay = DateTime.Now.DayOfWeek;
var greetingMessage = greeting + " Here in Huston it is: " + weekDay;
}*@
4.3.2 Razor的單行註釋,在行首寫@*,行尾寫*@,如下所示。
@* A one line code comment *@

4.4 Razor的三種基本形式

Razor通過三種標記方式來確定指定區域的程式碼是伺服器端程式碼: 1.行內(Inline)標記 2.單行(Single Line)標記 3.多行(Multi-Line)標記

4.5 在伺服器程式碼裡嵌入html程式碼…

一共三種方法: 1.在Razor標記的程式碼中如果有成對的html標記,則這個標記及其內容會被當作普通文字輸出。如: <p>var name2 = “Slark”;</p> 2.在Razor標記的程式碼中如果有"@:",則其後的一行程式碼會被當作普通文字輸出。如上面的 @:var name3 = “Slark”;<br /> 3.在Razor標記的程式碼中如果有<text>…</text>標記,則其內容會被當作普通文字輸出。如上面的 <text> var name4 = “Slark”;<br /> var name5 = “Slark”; </text>