ASP.NET MVC 3的分部視圖


1、什么是分部視圖,我們應該什么時候應該用?

作為一個對ASP.NET MVC 模型很熟悉的開發者,他們自然想創建一個內容和代碼都可以重用的組件,在web 窗體,我們可以創建一個web用戶控件或web服務器控件。但是在MVC,我們應該用分部視圖,在這個概念的角度看,對任何情景的應用情景都應該有用。
 
在應用程序中,每一頁上都顯示這個股票行情
在應用程序中,一個日歷控件顯示在多個頁面中
一個登錄框
用於在多個頁面上的社交網絡組件,如Facebook的Like按鈕。
 
雖然ASP.NET MVC 的分部視圖,在語法和功能這兩個不同的角度,理論上可以理解為用戶控件。WEB用戶控件在WEB窗體中使用ViewState、 PostBacks, and Events 。而在MVC的分部視圖,不使用任何上述技術管理狀態。正如ASP.NET Web用戶控件做的,分部視圖,可以挖掘到你的應用程序以及其他應用程序組件之間的數據共享中的模型。
 
2、分部視圖的渲染
在ASP.NET MVC3的分部視圖周昂,允許開發人員用精確和簡潔的 Razor syntax語法(或ASPX)創建可重復使用的內容模塊。呈現分部視圖的語法被作為一個HTML輔助實現。
 Html.Partial輔助呈現分部視圖名為“_FeaturedProduct”內聯。所有重載方法的第一個參數為@Html.Partial 你期望的視圖名稱或者分部視圖的名字,沒有文件擴展名。
 
例如,一個@Html.Partial輔助假定視圖放在  \Views\Shared\ 的文件夾下。其他的 @Html.Partial方法重載允許你在各個視圖之間傳遞ViewData或者 ViewBag對象.
下面的代碼演示調用呈現分部視圖的特點。
 
<div>
  @Html.Partial("_FeaturedProduct")
</div>

 

 

分部視圖可以在 Layout Page布局頁面呈現。
也有一些情況下,你可能要另外一種方式實現,比如直接寫入HTTP響應流,而不是局部視圖渲染結果。
 
<div> 
@Html.RenderPartial("_FeaturedProduct") 
</div>

使用Html.RenderPartial流圖像或其他元素,媒體中心或更快的下載時間是非常重要的。

 

3、創建一個局部視圖

不管是主視圖還是分部視圖都是.cshtml 的文件,其中分部視圖的不同之處是在於文件放在:\Views\Shared\ 文件下。通過在解決方案資源管理器上下文菜單中使用“添加新視圖”對話框來訪問\Views\Shared 文件節點。添加新的視圖模板“對話框提供了用於創建您的部分視圖,特別注意,包括選項的選擇。不要忘記檢查“作為一個局部視圖”創建或你會結束大量的代碼刪除。

 

 

一旦你創建的視圖,你可以開始通過簡單的編輯文件定制。刪除或修改視圖的代碼捆綁在一起。下面所示的代碼(_FeaturedProduct.cshtml)是默認視圖模板創建相同的代碼,我們可以修改,以顯示不同的特色產品:

<style type="text/css"> 
.featuredProduct {border: solid 1px #000} 
</style> 
<div> 
<div> 
<h2> 
Our Featured product:<br /> 
@ViewBag.FeaturedProduct.Name 
</h2> 
</div> <div> 
<h3> 
Now discounted to $@String.Format("{0:F}", ((decimal)ViewBag.FeaturedProduct.Price)-100) 
</h3> 
</div> 
<div> 
@Html.ActionLink("Featured Product Details", "Details", new { id = ViewBag.FeaturedProduct.ProductId }) 
</div> 
<div> 
<img class="featuredProduct" src="@Href("~/Content/Images")/@ViewBag.FeaturedProduct.ImageName" alt="Featured Product"/> 
</div> 
</div>

和強類型一樣,強類型分部視圖也支持點標記語法和訪問模型,ViewBag,ViewData的其他類,並專門設計數據共享。

我們閱讀上面的代碼,我們應該很明確,分部視圖和常規視圖的語法沒有區別。

重要的是沒有相關語法關於如何使用分部視圖。然而,考慮分部視圖和常規視圖之間的一致性,特別是當我們需要在它們之間共享數據。

4、主視圖與分部視圖的數據共享

應用程序組件之間的數據傳遞,這是一個普遍的現象,MVC,視圖和控制器這些組件也一樣。 如前所述,你可以使用ViewBag或ViewData的類進行數據的共享。首先,介紹ViewBag的ViewData幾個關鍵字:

ViewData的是以前發布的版本的;,ViewBag與MVC3一起發布的。

ViewData的可以包含任何類型的數據在一個鍵—值對格式。即,ViewData["Message"] = "Welcome";

ViewBag對象的ViewData對象的包裝,並允許開發人員編寫他們使用強類型的語法。

ViewBag對象可以通過簡單地設置在一個更流暢的語法屬性擴展。即· ViewBag.Customer = new Customer(1,"Smith");

 

如果在一個控制器的代碼使用ViewBag,或ViewData的類,這些類將可視圖的整個生命周期,而且包括其分部視圖。

可取的對象是的ViewBag。由於其更加流暢和動感的語法,還有復雜的對象可以很容易地在組件之間共享。下面的示例演示設置在控制器的ViewBag對象,它會提供所有必要的組件:

ProductModel productModel = new ProductModel();        
public ActionResult Index()
{
    ViewBag.FeaturedProduct = new FeaturedProduct(105, "The Most Awesome Bike Ever!", 1000.00M, "bike4.png");           
    return View(productModel.Products);            
}

訪問視圖里面的ViewBag或部分使用語法如下:

@ViewBag.FeaturedProduct.Name

5、總結

部分視圖重用HTML和Razor 語法,具有很好的數據共享。

 

6、資料來源

Introducing Razor

Introducing MVC Development w/the Razor View Engine

Razor View Syntax

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM