ASP.NET MVC 筆記 Razor (未完)
MVC基本架構
基本架構 Model View Controller
Model 邏輯層 負責邏輯運算並且與資料庫連接,通常於這層處理商業邏輯 會再開一個商業邏輯層
View 呈現層 負責前端的畫面顯示
Controller 控制層 負責從Model和View兩層傳輸及接收資料
因此通常一個MVC的架構大致上會有
View Model Controller
然後Model 與 商業邏輯層(送入Model 讓Model進入Dao層)相依,商業邏輯層與資料訪問層(Dao)相依
RouteConfig
設定所有網址與Controller之間的聯繫
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "web", action = "Index", id = UrlParameter.Optional }
);
routes.IgnoreRoute 這段的意思是不要透過RouteConfig處理的網址
意思是 www.exsample.com/xxx.axd/XXX/OOO/AAA .axd以後都都不處理
MapRoute的意思
第一個是name 這個Route的name
第二個是url 連接的命名
第三個是defaults 預設如localhost時 跳轉的頁面
如 www.localhsot.com 若預設為上列則變成
www.localhost.com/web/index
Controller
Controller程式命名為 SampleController 前面Sample為自定義的名稱 Controller是必要名稱
接著進入後會看到許多方法,回傳值為ActionResult 可以稱呼為Action
若有一個Function 為
public ActionResult Index()
{
return View();
} //預設案例
的話,只要輸入www.localhost.com/SampleController/Index
就會自動導向Index的html頁面了
當你寫好一個Controller,你可以右鍵,新增一個View,就會自動在相應的地方新增一個View了
最後,不一定回傳只能傳View,同樣可以傳圖片文字等。
接著關於給View的參數有三種 ViewBag , ViewData , TempData
ViewBag 只存在一個頁面,跳轉就沒了,使用dynamic的型態
Controller 使用方法為ViewBag.data = "data";
View 使用方法為 @ViewBag.data
使用dynamic型態的意思為,它會自動判別最佳型態。
public dynamic ViewBag { get; }
ViewData 只存在一個頁面,跳轉就沒了,使用Key-Value的方式
Controller 使用方法為ViewData["data"] = "data";
View 使用方法為 @ViewData["data"];
public System.Web.Mvc.ViewDataDictionary ViewData { get; set; }
ViewData 和 ViewBag Key是共用的 且不區分大小寫
TempData 只存在一個Request,可以跨Action使用
Controller 使用方法為 TempData["data"] = "data";
View 使用方法為 @TempData["data"]
public System.Web.Mvc.TempDataDictionary TempData { get; }
若不想TempData被View讀取使用後就被刪除,可透過如下兩種保存機制
1.使用TempData.Peek來長期儲存。
2.若是只想再儲存一次,之後被View再次讀取後就刪除則要使用TempData.Keep。
TempData.Keep(); 只會保留一次 呼叫一次後消失
有分
保留特定Key的
public void Keep(string key);
跟全部保留的
public void Keep();
Peek
TempData.Peek(string key) 這樣呼叫就會一直保持。
View
View也有共用的內容,通常是放在Shared資料夾中,這些資料也可以被其他View所共用
View的起點是_ViewStart.cshtml這隻程式,運作流程大致上為
Controller呼叫 _ViewStart.cshtml 決定整體版面,之後被Controller呼叫的View呈現內容,然後再由一開始_ViewStart的內容呼叫_Layout.cshtml來決定版面
_Layout.cshtml這隻程式決定整個網頁的全貌,在這隻程式內還可以找到@RenderBody()這個語法,功能是呈現內容。
目的是將Controller回傳的View嵌入Layout的@RenderBody()所在位置,至此,header,footer和side bar可以共用
Razor
Razor與其他網頁語言相似,而他調用變數的方法為@
如@Sample 或 @Sample.dog
如果程式多行則是
@{
var sample = Sample.dog;
var sample2 = Sample.cat;
var sampleT = sample + sample2
}
註解 @* *@
與html語法混用
@{
var sample = "dog";
<div>@sample</div>
}
Link 及 Url
@Html.ActionLink("Value" , "Action" , "Controller")
@Url.Action("Action" , "Controller")
Form
@using (Html.BeginForm("Action" , "Controller" , "FormMethod.type" , new(其他屬性)))
Ex
@using(Html.BeginForm("Index" , "Home" , "FormMethod.post" , new(id = "form1")))
Input
@Html.TextBox
一般使用方法
@html.TextBox("name" , "1")
<input id = "name" name = "name" type = "text" value = "1" />
model 綁定 ,需要傳入ViewModel 與在 View 上方宣告ViewModel type
@model WebApplication2.Model.Student
@Html.TextAreaFor(model => model.ID )
<input class="text-box single-line" id = "ID" name = "ID" type = "text" value = "" />
ViewModel 與 MVVM(Model View ViewModel)
MVX架構
如MVC MVVM MVP等
X代表著M與V之間的溝通橋樑,流程為:V提供畫面,並且把操作藉由X傳遞給M,M得到操作事件後回應對應的方法給V
MVC與MVP之間的差別
MVC架構
MVC是由V接收資訊,傳送給C然後C呼叫M並且M直接回傳給V呈現。
MVP架構則是由V接收資訊傳送給C然後C呼叫P,P獲得資料後傳送回C,C再傳回給V呈現。
MVVM架構,是接收View的操作事件,接著ViewModel去Model拿取資料後存取在ViewModel中,接著View再從ViewModel中自動偵測並抓取Data以自動更新
接著 ASP.NET 的 ViewModel 跟上述的MVVM又不一樣
C#
public ActionResult Sample(int id){
if (id.HasValue)
{
//抓第一個columnID = id 的資料
var sampleObject = db.tablename.FirstOrDefault(x => x.columnID == id);
return View(sampleObject);
}
}
參考:
https://dotblogs.com.tw/dog0416/2016/04/06/110004
https://coolmandiary.blogspot.com/2020/11/aspnet-mvcviewdataviewbagsessiontempdata.html
留言
張貼留言