軟件/環境 | 說明 |
---|---|
操做系統 | Windows 10 |
SDK | 2.1.401 |
ASP.NET Core | 2.1.3 |
IDE | Visual Studio Code 1.28 |
瀏覽器 | Chrome 70 |
本篇代碼基於如下代碼進行調整:https://github.com/ken-io/asp...html
你可能須要的前置知識git
https://baike.baidu.com/item/mvcgithub
VS Code 自己不提供 ASP.NET Core MVC 視圖引擎(Razor)的智能感知。
幸運的是,VS Code C#擴展 從 1.17.0 版本開始支持Razor視圖引擎的智能感知。瀏覽器
因此,咱們要將VS Code C#擴展升級到最新版本。架構
在MVC架構模式中,視圖引擎/模板引擎負責將控制器(Controller)提供的數據結合視圖模板進行渲染咱們須要的格式(一般是HTML)。控制器(Controller)再將渲染的結果返回給請求的客戶端。mvc
在 ASP.NET Core MVC框架中,提供了視圖引擎:Razor。
Razor提供了後綴爲.cshtml的視圖模板。Razor視圖模板支持使用Razor標記語言以及C#進行編寫。使用起來很是方便。框架
Razor 就至關於Java平臺經常使用的 Freemarker、Thymeleaf
Razor視圖模板文件一般放在根目錄Views文件夾對應控制器的子目錄中。
例如: ~/Views/Home/Time.cshtml。 asp.net
這是由於按照 ASP.NET Core MVC框架的約定,當咱們在控制器(Controller)返回一個視圖(return View();
)時,若是隻指定了視圖名稱(ViewName),並無指定視圖的完成路徑,那麼MVC框架將按照如下順序查找視圖:測試
public class HomeController : Controller { public IActionResult Test(){ return View(); } }
當沒有指定ViewName的時候,ViewName=ActionName="Test";
框架將按照約定順序查找視圖文件spa
public class HomeController : Controller { public IActionResult Test(){ return View("Test"); } public IActionResult TestAbc(){ return View("abc"); } }
分別手動指定了視圖名;ViewName="Test"、ViewName="abc";
框架將按照約定順序查找視圖文件
public class HomeController : Controller { public IActionResult Test(){ return View("Views/Test.cshtml"); } }
固定查找 Views/Test.cshtml 視圖文件
在Controllers文件夾下新增控制器RenderDataController.cs並繼承於Controller
using System; using Microsoft.AspNetCore.Mvc; namespace Ken.Tutorial.Web.Controllers { public class RenderDataController : Controller { } }
在Views目錄下建立文件夾RenderData
ViewData
ViewBag
@
ViewBag.SomeKey = <value or object>) 建立動態屬性,且無需強制轉換。@
ViewBag.Person?.Namepublic IActionResult ViewDataDemo() { ViewData["name"] = "ken"; ViewData["birthday"] = new DateTime(2000, 1, 1); ViewData["hobby"] = new string[] { "跑步", "閱讀", "Coding" }; return View(); }
@{ var hobby =ViewData["hobby"] as String[]; } <h3>@ViewData["title"]</h3> <ul> <li>姓名:@ViewData["name"]</li> <li>生日:@ViewData["birthday"]</li> <li>愛好:@hobby[0] , @hobby[1]</li> </ul>
啓動項目,訪問 /renderdata/viewdatademo
將會看到:
public IActionResult ViewBagDemo() { ViewBag.Title = "ViewBag傳值示例"; ViewBag.Name = "ken"; ViewBag.Birthday = new DateTime(2000, 1, 1); ViewBag.Hobby = new string[] { "跑步", "閱讀", "Coding" }; return View(); }
@{ var hobby =ViewBag.Hobby as String[]; } <h3>@ViewBag.Title</h3> <ul> <li>姓名:@ViewBag.Name</li> <li>生日:@ViewBag.Birthday</li> <li>愛好:@hobby[0] , @hobby[1]</li> </ul>
啓動項目,訪問 /renderdata/viewbagdemo
將會看到:
視圖強類型一般稱爲ViewModel,咱們能夠在return View();
時指定視圖參數/對象。並在視圖文件(.cshtml)中經過 @model
語法指定對應的類型,這樣咱們能夠在視圖文件(.cshtml)中使用Model
關鍵字來使用傳輸到視圖的該類型的實例。
在項目根目錄建立Models
文件夾並在文件中建立Person.cs
using System; namespace Ken.Tutorial.Web.Models { public class Person { public string Name { get; set; } public DateTime Birthday { get; set; } public string[] Hobby { get; set; } } }
public IActionResult ViewModelDemo() { ViewBag.Title = "ViewModel傳值示例"; var person = new Person { Name = "ken", Birthday = new DateTime(2000, 1, 1), Hobby = new string[] { "跑步", "閱讀", "Coding" } }; //等同於 return View("ViewModelDemo", person); return View(person); }
@model Ken.Tutorial.Web.Models.Person; <h3>@ViewBag.Title</h3> <ul> <li>姓名:@Model.Name</li> <li>生日:@Model.Birthday</li> <li>愛好:@Model.Hobby[0] , @Model.Hobby[1]</li> </ul>
啓動項目,訪問 /renderdata/viewmodeldemo
將會看到:
https://github.com/ken-io/asp...
https://docs.microsoft.com/zh...
本文首發於個人獨立博客:https://ken.io/note/asp.net-c...