亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

ASP.NET MVC中的視圖生成實例分析

2024-07-10 13:28:40
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了ASP.NET MVC中的視圖生成的過程,以實例形式詳細分析了控制器、布局與視圖的操作方法與技巧,非常具有實用價值,需要的朋友可以參考下
 
 

本文實例分析了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")

 

希望本文所述對大家的asp.net程序設計有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一本色道久久88综合亚洲精品ⅰ| 欧美电影免费观看大全| 国产精品一区=区| 亚洲人成网7777777国产| 国产精品com| 久久精品电影网站| 欧美精品久久久久久久久久| 久久偷看各类女兵18女厕嘘嘘| 中文字幕在线日韩| 欧美成人精品三级在线观看| 国产精品69精品一区二区三区| 一区二区三区美女xx视频| 高跟丝袜一区二区三区| 亚洲欧美资源在线| 国产成人福利视频| 国产精品精品久久久| 欧美精品videosex极品1| 久久色免费在线视频| 国产精品成人久久久久| 国产精品国产三级国产专播精品人| 精品久久国产精品| 国产精品久久二区| 日韩精品日韩在线观看| 欧美一级视频在线观看| 91久久久久久久久久久久久| 在线电影中文日韩| 色综合久久天天综线观看| 亚洲片国产一区一级在线观看| 91在线国产电影| 国产视频观看一区| 日韩成人在线视频观看| 一区二区在线免费视频| 国产日产亚洲精品| 欧美贵妇videos办公室| 欧美日韩亚洲一区二区三区| 欧美电影在线观看网站| 成人免费视频网| 中文字幕日韩精品在线观看| 日韩欧美一区二区在线| 啪一啪鲁一鲁2019在线视频| 国产一区二区三区在线免费观看| 日韩欧美亚洲范冰冰与中字| 国产视频自拍一区| 色综合91久久精品中文字幕| 亚洲女人被黑人巨大进入al| 精品一区精品二区| 久久精品影视伊人网| 久久中文久久字幕| 91亚洲精品久久久| 欧美国产激情18| 欧美日韩国产二区| 国产主播喷水一区二区| 亚洲精品久久久久中文字幕欢迎你| 自拍偷拍亚洲精品| 国产亚洲精品va在线观看| 欧美激情视频三区| 亚洲视频免费一区| 亚洲影院色无极综合| 亚洲国产97在线精品一区| 日韩中文在线中文网在线观看| 欧美激情中文网| 日韩av在线播放资源| 亚洲日本aⅴ片在线观看香蕉| 亚洲一区二区三区sesese| 国产精品美女www爽爽爽视频| 26uuu日韩精品一区二区| 人妖精品videosex性欧美| 国产美女精品视频免费观看| 久久精品一区中文字幕| 精品国产区一区二区三区在线观看| 综合欧美国产视频二区| 国产精品精品一区二区三区午夜版| 久久久久久午夜| 亚洲成人黄色在线观看| 国产亚洲欧美日韩一区二区| 久久久亚洲国产天美传媒修理工| 欧美日韩国产色| 亚洲人成电影网站色…| 欧美大片第1页| 91国产视频在线播放| 亚洲欧洲国产伦综合| 亚洲精品女av网站| 久久99国产精品自在自在app| 亚洲网址你懂得| 国内精品久久久| 成人精品一区二区三区| 久久在线精品视频| 亚洲福利在线观看| 欧美寡妇偷汉性猛交| 成人xvideos免费视频| 欧美精品在线播放| 91精品视频一区| 久热精品视频在线免费观看| 欧美一级在线亚洲天堂| 久久久久亚洲精品国产| 奇门遁甲1982国语版免费观看高清| 日韩大陆欧美高清视频区| 8x海外华人永久免费日韩内陆视频| 日本亚洲精品在线观看| 成人国产精品日本在线| 成人妇女淫片aaaa视频| 亚洲人成网站999久久久综合| 亚洲免费伊人电影在线观看av| 欧美激情视频一区二区| 欧美激情免费在线| 日韩av在线免费看| 亚洲电影av在线| 亚洲国产日韩欧美在线图片| 欧美中文字幕视频在线观看| 国产在线精品成人一区二区三区| 欧美成人精品影院| 国产日本欧美在线观看| 亚洲xxxx妇黄裸体| 少妇高潮久久久久久潘金莲| 91禁国产网站| 欧美成人午夜免费视在线看片| 久久久久久亚洲精品| 免费99精品国产自在在线| 成人信息集中地欧美| 懂色aⅴ精品一区二区三区蜜月| 亚洲电影免费观看高清完整版| 国产午夜精品视频| 亚洲最大中文字幕| 日韩国产高清污视频在线观看| 日韩精品久久久久久久玫瑰园| 日韩欧美国产视频| 色樱桃影院亚洲精品影院| 77777亚洲午夜久久多人| www.亚洲成人| 国产成人亚洲综合91| 69国产精品成人在线播放| 国产精品视频999| 国产精品三级在线| 午夜精品福利电影| 91色p视频在线| 中文字幕日韩欧美| 91九色综合久久| 91欧美精品成人综合在线观看| 日韩精品中文字幕在线观看| 久久久久久久久久国产精品| 热99在线视频| 中文字幕精品在线| 4388成人网| 狠狠久久五月精品中文字幕| 国产一区二区三区精品久久久| 亚洲精品一二区| 日韩中文字幕免费看| 精品久久久久久久久久| 青青草精品毛片| 国产亚洲精品91在线| 亚洲社区在线观看| 欧美日韩第一视频| 亚洲欧美在线免费| 国产精品三级久久久久久电影| 亚洲精品久久久久久久久久久久久| 日韩在线播放视频| 欧美日韩色婷婷| 日日狠狠久久偷偷四色综合免费| 亚洲**2019国产| 91精品久久久久久久| 日本亚洲欧洲色| 97视频人免费观看| 中文字幕在线观看日韩| 国产欧美一区二区三区四区|