1. 程式人生 > >.net core MVC 入門筆記記錄

.net core MVC 入門筆記記錄

http 筆記 delete public 比較 key值 attribute memory 對象

  作為開發者,永遠不能停下學習的腳步。.net core mvc似乎跟.net mvc在使用層面上有一些相同,我本著在學習.net core mvc的同時也復習一下.net mvc的心態,打算從頭學習.net core mvc,以下是我學習過程中的學習筆記,好記性不如爛鍵盤。

一、數據綁定特性

這幾個特性通常用於接口接收參數的約束,特性寫在參數前:


  public class HomeController : Controller
  {
    public IActionResult Index([FromBody] int id,string name)
    {
      return View();
    }

  }

  1.FromHeaderAttribute:

  用於綁定數據源為請求頭的數據,如果沒有指定該特性,控制器方法不會默認接收請求頭數據

  2.FromQueryAttribute:

  用於綁定數據源為查詢字符串,如果有多個數據源返回同一個key值的數據,則優先使用查詢字符串的數據

  3.FromFormAttribute:

  用於綁定數據源為表單數據,如果有多個數據源返回同一個key值的數據,則優先使用表單數據

  4.FromRouteAttribute:

  用於綁定數據源在URL地址裏對應路由的數據,

如:路由為 api/{name}/{id},當url地址為 api/zhangsan/5,則控制器對應方法能name參數能接收到“zhangsan”,id參數能接收到“5”

  5.FromBodyAttribute:

  用於綁定數據源在請求體的數據,此特性不能用於Get請求,僅用於PUT,POST和Delete請求

二、控制器常用返回方法

  1.我們知道.net core mvc 控制器方法返回的類型是IActionResult接口,但該接口有幾個比較常用的實現類:

  (1)JsonResult:返回JSON結構數據

  (2)RedirectResult:跳轉到新地址

  (3)FileResult:返回文件

  (4)ViewResult:返回視圖頁面

  (5)ContentResult:文本內容

  2.由於控制器類是繼承於Controller的,所以也可以直接使用封裝在Controller裏的方法來進行返回IActionResult的實現類,對應於上面實現類的方法封裝:

  (1)Json(Object)

  (2)Redirect(Url)

  (3)File()

  (4)View()

  (5)Content()

三、布局頁與分布視圖

  1.布局頁  

  (1)在子頁出現在布局頁的位置寫上:@renderbody(),表示此處需要輸出子頁面內容,在子頁面中使用Layout屬性指定布局頁

  (2)如果需要布局頁的某些模塊對子頁進行分割,則可以使用:@rendersection,使用方法:挖坑@rendersection("名稱1"),填坑@section 名稱1{ }

  (3)布局頁不能獨立使用

  2.分布視圖

  (1)把重復的視圖(HTML片段)抽離出來,封裝成部分視圖,供其他視圖調用,減少工作量,便於維護

  (2)可以通過Html.RenderPartial(viewPath)來調用分布視圖

  (3)也可以通過Html.RenderAction(路由地址,參數)來調用分布視圖

  (4)分布視圖常用於ajax請求,返回html片段

四、控制器、視圖的數據傳遞

  1.ViewDate

  (1)鍵值對,用法:ViewData[key]=value

  (2)僅用於當前控制器與對應視圖,不可跨視圖

  2.ViewBag

  (1)鍵值對,用法:ViewBag.key=value

  (2)ViewBag是ViewDate的封裝,所以也僅用於當前控制器與對應視圖,不跨視圖

  (3)ViewBag.key1等價於ViewData["key1"],如果之前對ViewData["key1"]賦值,之後對ViewBag.key1賦值,則會覆蓋ViewData["key1"]

  3.TempData

  (1)鍵值對,用法:TempData[key]=value,跟ViewDate差不多

  (2)視圖級別,可跨視圖

  (3)賦值後只能使用一次賦值後的值,使用完後就消失,但可多次賦值達到復用效果

  4.Session

  (1)鍵值對,會話級別,在服務端保存

  (2)不支持根據索引器獲取或設置session

  (3)用法:

    a.在Startup的ConfigureServices方法裏寫上services.AddSession(),啟用Session

    b.在Startup的Configure方法裏寫上app.UseSession()

    c.HttpContext.Session獲取session對象

    d.對session對象進行儲存或獲取數據

    public void ConfigureServices(IServiceCollection services)
        {
            services.AddSession();
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseHsts();
            }

            app.UseSession();
            app.UseHttpsRedirection();
            app.UseMvc();
        }
  public class HomeController : Controller
    {
        public IActionResult Index(int id, string name)
        {
            ISession session = HttpContext.Session;//獲取session對象

            //儲存數據的三種方法
            session.Set("key1", new byte[1]);
            session.SetInt32("key2", 1);
            session.SetString("key3", "value");

            return View();
        }

        public IActionResult About()
        {
            ISession session = HttpContext.Session;//獲取session對象

            //獲取數據
            byte[] byteArr = session.Get("key1");
            int? intValue = session.GetInt32("key2");
            string stringValue = session.GetString("key3");

            return View();
        }
    }

  

  5.Cache

  (1)鍵值對,應用程序級別,在服務端保存

  (2)與.net framework的不同,一種全新的實現,繼承IMemoryCache接口,通過Get/Set方法來儲存或獲取數據

  (3)運用依賴註入的方式獲取Cache對象

  (4)使用方法:

    public class HomeController : Controller
  {
private readonly IMemoryCache _cache; public HomeController(IMemoryCache cache) { //依賴註入 _cache = cache; } public IActionResult Index(int id, string name) { //儲存數據 _cache.Set("key1", 1); //刪除數據 // _cache.Remove("key1"); return View(); } public IActionResult About() { //獲取數據 int intValue= (int)_cache.Get("key1"); return View(); } }

五、視圖的全局設置

  1.ViewStart

  (1)在每個視圖呈現之前都會執行的一個視圖

  (2)必須以_ViewStart.cshtml命名,必須放在視圖所在目錄的根目錄下(即:Views目錄下),會自動執行

  (3)在此視圖可做一些通用的設置,如:可用於母版頁聲明等

  2.ViewImport

  (1)必須以_ViewImport.cshtml命名,必須放在視圖所在目錄的根目錄下(即:Views目錄下),會自動執行

  (2)可以使用@using關鍵字引入所需命名空間做全局性的命名空間引入,減少在每個頁面中引入的工作量

.net core MVC 入門筆記記錄