.net core MVC 入門筆記記錄
作為開發者,永遠不能停下學習的腳步。.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 入門筆記記錄