日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

关于 ASP.NET MVC 中的视图生成

發布時間:2023/12/10 asp.net 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于 ASP.NET MVC 中的视图生成 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在 ASP.NET MVC 中,我們將前端的呈現劃分為三個獨立的部分來實現,Controller 用來控制用戶的操作,View 用來控制呈現的內容,Model 用來表示處理的數據。

從控制器到視圖

通常,在 Controller 中,我們定義多個 Action ,每個 Action 的返回類型一般是 ActionResult,在 Action 處理的最后,我們返回對于視圖的調用。

public ActionResult Index() {return this.View(); }

默認情況下,將會調用與 Action 同名的視圖,比如,在上面的 Action 中,將會使用名為 Index 的視圖。

如果我們傳遞了一個字符串參數,那么,這個字符串就回被視為視圖的名稱,例如,我們希望使用名為?IndexView 的視圖進行呈現,那么,可以如下完成。

public ActionResult Index() {return this.View("IndexView"); }

布局與視圖

MVC 會直接去找我們的視圖嗎?不會!

從 Action 返回之后,首先,MVC 會在 Views 文件夾下查看是否存在一個名為?_ViewStart.cshtml 的特殊文件,如果存在的話,就回執行這個文件。

默認情況下,這個文件的內容如下所示:

@{Layout = "~/Views/Shared/_Layout.cshtml"; }

也就是說,它設置了我們的默認布局使用那一個文件文件。

布局等價于我們在 WebForm 中所使用的母版頁。

如果沒有這個文件,默認沒有使用布局。

如果有了這個文件,而我們在頁面中不想使用這個布局怎么辦呢?很簡單,在頁面中設置 Layout = null 來覆蓋掉它。

@{Layout = null; }

布局中的分區

在布局頁面中,默認就回存在一個特殊的指令?@RenderBody(),這是說,你在內容頁面中呈現的內容,將會在這里進行輸出。這就是在使用布局之后,你會發現你的視圖中已經沒有了 <html> 標記的原因。

<body>@RenderBody() </body>

假如說,我們希望在布局中的多個位置進行輸出,比如,樣式表通常在 <head> 標記中,而現代的腳本則會出現在頁面的最后,頁面的內容當然出現在頁面的主體中了。這樣的話,我們在內容頁面的實際內容,將會需要在布局的不同部分進行呈現,而不是在同一個位置進行呈現了。

解決的辦法就是分區,實際上,類似于 WebForm 中的 ContentPlaceHolder ,定義一個命名的區域。

比如,下面我們定義了一個名為 scripts 的命名區域,第二個參數表示這個區域是可選的區域,在內容頁面中可以不用提供內容。

<body>@RenderBody()@RenderSection("scripts", required: false) </body>

而在我們的內容視圖中,默認所有的內容都是填充到布局頁面中的?RenderBody 部分。

如果不是的話,就可以在內容頁面中,通過 @section 區域名稱{ } 的方式來定義準備輸出到對應區域中的內容了。

@section scripts{<script type="text/javascript">var i = 0;</script> }

分部視圖

如果我們的頁面比較復雜,在同一個視圖中定義輸出的內容會導致頁面非常復雜,通過將頁面劃分為多個比較獨立的組成部分,可以將一個復雜的頁面拆分為多個子部分來呈現。比如頁面的標題部分,頁面的菜單,頁面的腳注部分等等。在 WebForm 中,解決這個問題的技術稱為用戶控件,在 MVC 中由兩個技術來解決:分部視圖和子 Action。

先看分部視圖,分部視圖不依賴于 Action ,只能嵌入到其他獨立視圖中使用,你可以直接在視圖文件夾中創建分部視圖。

在使用分部視圖的頁面中,使用 RenderPartial 方法調用分部視圖。

Html.RenderPartial("ProductSummary");

分部視圖與主視圖共享所有的數據,比如模型,ViewData,ViewBag 等等,這些數據可以直接在分部視圖中使用。

如果希望分部視圖使用不同的模型對象,簡化分部視圖中的數據復雜度,也可以直接傳遞一個模型對象過去。

Html.RenderPartial("ProductSummary", p);

這里的第二個參數,將會在分部視圖中當在模型對象來使用。

需要注意的是 RenderPartial 方法的返回類型是 void,它會將輸出的內容直接輸出到回應的輸出流中。所以在使用上面語句的時候,不能直接嵌入到頁面中,需要放在一個 @ { } 語句中,如下所示。

@{Html.RenderPartial("ProductSummary", p); }

如果你不喜歡這樣的語法,而希望直接嵌入到頁面中,也可以使用 Html.Partial 方法來呈現,區別是這個方法返回呈現的 Html 片段,而不是直接輸出到輸出流中。

@Html.Partial("ProductSummary", p)

?

子 Action 問題

由于分布視圖沒有處理能力,只能繼承主頁面的數據進行呈現,如果需要有處理能力,怎么辦呢?在 WebForm 中,我們可以使用 Server.Execute ?來嵌入其它處理程序的輸出內容,在 MVC 中,我們使用子 Action 來處理。

子 Action 就是用戶不能直接訪問,只能在其他的 Action 中訪問的 Action 方法,它與普通的 Action 一樣,有 Action 方法,還有這個 Action 對應的視圖。

我們使用特性?ChildActionOnly 來說明這是一個子 Action。

[ChildActionOnly] public string Menu() {return "Hello, from NavController"; }

如果用戶直接請求這個子 Action ,那么,系統會返回一個錯誤信息。

操作“menu”只能由子請求訪問。

在其它視圖中,可以使用 RenderAction 來訪問子 Action,類似于 RenderPartial 方法,這個方法直接將內容輸出到輸出流中,由于它們的返回類型都是 void ,所以需要使用 @{} 來使用。

@{ Html.RenderAction("Menu", "Nav"); }

同樣,使用 Action 則可以直接返回一個 Html 片段,就不用使用一個 @{ } 了。

<!-- Action --> @Html.Action("Menu", "Nav")

?

?

?

?

轉載于:https://www.cnblogs.com/haogj/p/3533377.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的关于 ASP.NET MVC 中的视图生成的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。