欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ASP.NET MVC中的視圖生成實(shí)例分析

 更新時(shí)間:2014年12月17日 10:37:28   投稿:shichen2014  
這篇文章主要介紹了ASP.NET MVC中的視圖生成的過程,以實(shí)例形式詳細(xì)分析了控制器、布局與視圖的操作方法與技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下

本文實(shí)例分析了ASP.NET MVC中的視圖生成過程。分享給大家供大家參考。具體如下:

在 ASP.NET MVC 中,我們將前端的呈現(xiàn)劃分為三個(gè)獨(dú)立的部分來實(shí)現(xiàn),Controller 用來控制用戶的操作,View 用來控制呈現(xiàn)的內(nèi)容,Model 用來表示處理的數(shù)據(jù)。

從控制器到視圖

通常,在 Controller 中,我們定義多個(gè) Action ,每個(gè) Action 的返回類型一般是 ActionResult,在 Action 處理的最后,我們返回對(duì)于視圖的調(diào)用。

復(fù)制代碼 代碼如下:
public ActionResult Index()
{
    return this.View();
}

默認(rèn)情況下,將會(huì)調(diào)用與 Action 同名的視圖,比如,在上面的 Action 中,將會(huì)使用名為 Index 的視圖。
 
如果我們傳遞了一個(gè)字符串參數(shù),那么,這個(gè)字符串就回被視為視圖的名稱,例如,我們希望使用名為 IndexView 的視圖進(jìn)行呈現(xiàn),那么,可以如下完成。
復(fù)制代碼 代碼如下:
public ActionResult Index()
{
    return this.View("IndexView");
}

布局與視圖

MVC 會(huì)直接去找我們的視圖嗎?不會(huì)!
 
從 Action 返回之后,首先,MVC 會(huì)在 Views 文件夾下查看是否存在一個(gè)名為 _ViewStart.cshtml 的特殊文件,如果存在的話,就回執(zhí)行這個(gè)文件。
 
默認(rèn)情況下,這個(gè)文件的內(nèi)容如下所示:

復(fù)制代碼 代碼如下:
@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

也就是說,它設(shè)置了我們的默認(rèn)布局使用那一個(gè)文件文件。
 
布局等價(jià)于我們?cè)?WebForm 中所使用的母版頁。
 
如果沒有這個(gè)文件,默認(rèn)沒有使用布局。
 
如果有了這個(gè)文件,而我們?cè)陧撁嬷胁幌胧褂眠@個(gè)布局怎么辦呢?很簡單,在頁面中設(shè)置 Layout = null 來覆蓋掉它。
復(fù)制代碼 代碼如下:
@{
    Layout = null;
}

布局中的分區(qū)

在布局頁面中,默認(rèn)就回存在一個(gè)特殊的指令 @RenderBody(),這是說,你在內(nèi)容頁面中呈現(xiàn)的內(nèi)容,將會(huì)在這里進(jìn)行輸出。這就是在使用布局之后,你會(huì)發(fā)現(xiàn)你的視圖中已經(jīng)沒有了 <html> 標(biāo)記的原因。

復(fù)制代碼 代碼如下:
<body>
    @RenderBody()
</body>

假如說,我們希望在布局中的多個(gè)位置進(jìn)行輸出,比如,樣式表通常在 <head> 標(biāo)記中,而現(xiàn)代的腳本則會(huì)出現(xiàn)在頁面的最后,頁面的內(nèi)容當(dāng)然出現(xiàn)在頁面的主體中了。這樣的話,我們?cè)趦?nèi)容頁面的實(shí)際內(nèi)容,將會(huì)需要在布局的不同部分進(jìn)行呈現(xiàn),而不是在同一個(gè)位置進(jìn)行呈現(xiàn)了。
 
解決的辦法就是分區(qū),實(shí)際上,類似于 WebForm 中的 ContentPlaceHolder ,定義一個(gè)命名的區(qū)域。
 
比如,下面我們定義了一個(gè)名為 scripts 的命名區(qū)域,第二個(gè)參數(shù)表示這個(gè)區(qū)域是可選的區(qū)域,在內(nèi)容頁面中可以不用提供內(nèi)容。
復(fù)制代碼 代碼如下:
<body>
    @RenderBody()
 
    @RenderSection("scripts", required: false)
</body>

而在我們的內(nèi)容視圖中,默認(rèn)所有的內(nèi)容都是填充到布局頁面中的 RenderBody 部分。
 
如果不是的話,就可以在內(nèi)容頁面中,通過 @section 區(qū)域名稱{ } 的方式來定義準(zhǔn)備輸出到對(duì)應(yīng)區(qū)域中的內(nèi)容了。
復(fù)制代碼 代碼如下:
@section scripts{
    <script type="text/javascript">
        var i = 0;
    </script>
}

分部視圖

如果我們的頁面比較復(fù)雜,在同一個(gè)視圖中定義輸出的內(nèi)容會(huì)導(dǎo)致頁面非常復(fù)雜,通過將頁面劃分為多個(gè)比較獨(dú)立的組成部分,可以將一個(gè)復(fù)雜的頁面拆分為多個(gè)子部分來呈現(xiàn)。比如頁面的標(biāo)題部分,頁面的菜單,頁面的腳注部分等等。在 WebForm 中,解決這個(gè)問題的技術(shù)稱為用戶控件,在 MVC 中由兩個(gè)技術(shù)來解決:分部視圖和子Action。
 
先看分部視圖,分部視圖不依賴于 Action ,只能嵌入到其他獨(dú)立視圖中使用,你可以直接在視圖文件夾中創(chuàng)建分部視圖。
 
在使用分部視圖的頁面中,使用 RenderPartial 方法調(diào)用分部視圖。

復(fù)制代碼 代碼如下:
Html.RenderPartial("ProductSummary");

分部視圖與主視圖共享所有的數(shù)據(jù),比如模型,ViewData,ViewBag 等等,這些數(shù)據(jù)可以直接在分部視圖中使用。
 
如果希望分部視圖使用不同的模型對(duì)象,簡化分部視圖中的數(shù)據(jù)復(fù)雜度,也可以直接傳遞一個(gè)模型對(duì)象過去。
復(fù)制代碼 代碼如下:
Html.RenderPartial("ProductSummary", p);

這里的第二個(gè)參數(shù),將會(huì)在分部視圖中當(dāng)在模型對(duì)象來使用。
 
需要注意的是 RenderPartial 方法的返回類型是 void,它會(huì)將輸出的內(nèi)容直接輸出到回應(yīng)的輸出流中。所以在使用上面語句的時(shí)候,不能直接嵌入到頁面中,需要放在一個(gè) @ { } 語句中,如下所示。
復(fù)制代碼 代碼如下:
@{
  Html.RenderPartial("ProductSummary", p);
}

如果你不喜歡這樣的語法,而希望直接嵌入到頁面中,也可以使用 Html.Partial 方法來呈現(xiàn),區(qū)別是這個(gè)方法返回呈現(xiàn)的 Html 片段,而不是直接輸出到輸出流中。
復(fù)制代碼 代碼如下:
@Html.Partial("ProductSummary", p)

子 Action 問題

由于分布視圖沒有處理能力,只能繼承主頁面的數(shù)據(jù)進(jìn)行呈現(xiàn),如果需要有處理能力,怎么辦呢?在 WebForm 中,我們可以使用 Server.Execute  來嵌入其它處理程序的輸出內(nèi)容,在 MVC 中,我們使用子 Action 來處理。
 
子 Action 就是用戶不能直接訪問,只能在其他的 Action 中訪問的 Action 方法,它與普通的 Action 一樣,有 Action 方法,還有這個(gè) Action 對(duì)應(yīng)的視圖。
 
我們使用特性 ChildActionOnly 來說明這是一個(gè)子 Action。

復(fù)制代碼 代碼如下:
[ChildActionOnly]
public string Menu()
{
    return "Hello, from NavController";
}

如果用戶直接請(qǐng)求這個(gè)子 Action ,那么,系統(tǒng)會(huì)返回一個(gè)錯(cuò)誤信息。
 
操作“menu”只能由子請(qǐng)求訪問。

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

復(fù)制代碼 代碼如下:
@{ Html.RenderAction("Menu", "Nav"); }

同樣,使用 Action 則可以直接返回一個(gè) Html 片段,就不用使用一個(gè) @{ } 了。
復(fù)制代碼 代碼如下:
<!--  Action -->
@Html.Action("Menu", "Nav")

希望本文所述對(duì)大家的asp.net程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • .net框架(framework)版本不匹配的解決方法

    .net框架(framework)版本不匹配的解決方法

    .net框架(framework)版本不匹配的解決方法,需要的朋友可以參考一下
    2013-03-03
  • asp.net 計(jì)算字符串中各個(gè)字符串出現(xiàn)的次數(shù)

    asp.net 計(jì)算字符串中各個(gè)字符串出現(xiàn)的次數(shù)

    比如一個(gè)字符串"a,b,a,c,b,b,d",現(xiàn)在我們要統(tǒng)計(jì)每個(gè)字符串出現(xiàn)次數(shù)。解決這個(gè)問題,我們可以使用泛型集合 Dictionary(TKey,TValue)。它有一個(gè)key值用來存儲(chǔ)字符串和一個(gè)value值,用來存儲(chǔ)字符串出現(xiàn)的次數(shù)
    2012-05-05
  • 國產(chǎn)化中的?.NET?Core?操作達(dá)夢數(shù)據(jù)庫DM8的兩種方式(操作詳解)

    國產(chǎn)化中的?.NET?Core?操作達(dá)夢數(shù)據(jù)庫DM8的兩種方式(操作詳解)

    這篇文章主要介紹了國產(chǎn)化之?.NET?Core?操作達(dá)夢數(shù)據(jù)庫DM8的兩種方式,這里提供兩種方式是傳統(tǒng)的DbHelperSQL方式和Dapper?方式,每種方式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • Excel自定義關(guān)閉按鈕實(shí)現(xiàn)代碼

    Excel自定義關(guān)閉按鈕實(shí)現(xiàn)代碼

    這篇文章主要介紹了Excel自定義關(guān)閉按鈕實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Visual Studio 2017 RC 初探安裝教程

    Visual Studio 2017 RC 初探安裝教程

    這篇文章主要為大家詳細(xì)介紹了Visual Studio 2017 RC初探安裝教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • aspx不顯示ViewState的實(shí)例

    aspx不顯示ViewState的實(shí)例

    重寫Render方法,來去掉ViewState,提高網(wǎng)站的性能
    2013-03-03
  • ASP.NET緩存管理的幾種方法

    ASP.NET緩存管理的幾種方法

    在解釋ASP.NET中的緩存管理之前,我先澄清一下,不同的人使用不同的術(shù)語來解釋同樣的概念,有些人把它描述為狀態(tài)管理,有些人描述為緩存管理。我喜歡用緩存管理,或許是因?yàn)槲蚁矚g這個(gè)詞“Cache”吧。 但是就所指含義來說,它們兩個(gè)沒有區(qū)別。現(xiàn)在讓我們來探討一下在ASP.NET環(huán)境下緩存管理的各個(gè)方面吧。
    2012-12-12
  • Json.net日期格式化設(shè)置方式

    Json.net日期格式化設(shè)置方式

    這篇文章主要介紹了Json.net日期格式化設(shè)置方式,文中給大家補(bǔ)充介紹了json.net 使用屬性定義日期的序列化格式,需要的朋友可以參考下
    2018-11-11
  • asp.net中IDataParameter調(diào)用存儲(chǔ)過程的實(shí)現(xiàn)方法

    asp.net中IDataParameter調(diào)用存儲(chǔ)過程的實(shí)現(xiàn)方法

    這篇文章主要介紹了asp.net中IDataParameter調(diào)用存儲(chǔ)過程的實(shí)現(xiàn)方法,在asp.net數(shù)據(jù)庫程序設(shè)計(jì)中非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-09-09
  • asp.net 仿微信端菜單設(shè)置實(shí)例代碼詳解

    asp.net 仿微信端菜單設(shè)置實(shí)例代碼詳解

    本文通過實(shí)例代碼給大家介紹了asp.net 仿微信端菜單設(shè)置方法,代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2018-11-11

最新評(píng)論