public ActionResult Index() {ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";//展現到視圖中數據//~/Views/Home/Index.cshtmlreturn View(); //展現指定的視圖,當沒有指定視圖名稱時,默認是指向根目錄下Views文件夾中,子文件夾名稱為當前控制器名稱Home,視圖名稱和當前Action名稱一樣}
ViewBag本質上是一個字典,它提供了一種View可以訪問的動態數據存儲,這用到了.NET4.0的動態語言特性,你可以給ViewBag添加任意的屬性,這個屬性是動態創建的,你不需要修改類的定義,就可以從View中訪問
View和Action之間數據傳遞(前后臺數據傳遞)
? 弱類型 ViewData[""]
? 動態型 ViewBag //dynamic
? 動態類型Model
???????????? 后臺:return View(data); //存入 ViewData.Model
???????????? 前臺:Model //其實就是 WebViewPage.Model
?
public ActionResult Index()
{
Employee data = new Employee();
data.Name = "張三";
data.Age = 26;
return View(data);
}
?
1.@RenderBody()? //模板頁里的占位符
2.@{
?? Layout = "~/Views/Shared/MyLayout.cshtml";
?? View.Title="Employee";
}
<p>子頁所有html代碼都將替換到 模板頁的@RenderBody()處</p>
應用整體視圖模板 - 多個"占位符"
?
3.模板頁多個節:
?? <footer>@RenderSection("Footer")</footer>
?? 子頁面定義節點:
@section Footer{<b>這里是腳部區域!</b>}
模板頁判斷是否為布局節方法,IsSectionDeined
@if(IsSectionDefined("Footer")){@RenderSection("Footer");}else{<b>“子頁面”沒有Footer~</b>}
Razor 布局 – ViewStart
每個子頁面都使用一個Layout指定布局。如果多個視圖都用同一個布局就會產生冗余,修改維護麻煩。
_ViewStart.cshtml 可解決此問題
此文件代碼優先于同目錄及子目錄下任何視圖代碼執行
View目錄下自動添加的_ViewStart.cshtml
?
@{Layout = "~/Views/Shared/_Layout.cshtml";}
其實我們的cshtml視圖頁面,在被訪問的時候,也編譯成了頁面類,繼承于:WebViewPage<T>
在View頁面,添加代碼
?
<div>@{Response.Write(this.GetType().Assembly.Location);}</div>
運行結果:C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\vs\0282ae3e\58806453\App_Web_irdyebpa.dll