原文:
mvc5+ef6 入門完整教程六
本篇我們談談分部檢視(partial view)。
上篇文章提到過partial和action這兩個helper, 本篇文章主要就結合這兩個helper來講解分部檢視(partial view)的應用。
partial view指可以應用於view中以作為其中一部分的view的片段(類似於之前的user control), 可以像類一樣,編寫一次, 然後在其他view中被反覆使用。
一般放在"views/shared"資料夾中以共享。
建立partial view:一般直接右鍵"views/shared"資料夾新增分部檢視。
使用partial view有兩類helper :
html.partial / html.renderpartial
html.action / html.renderaction
大概五年前我開發過乙個iportal(類似於以前的igoogle,現在igoogle已經關閉), 其他類似的參考**:
裡面有乙個個可以自定義的widget,下面我們就開發乙個簡單的widget來說明partial view的用法。
如下圖,建立 _partialpagewidget.cshtml
我們做乙個簡陋的widget.
參考下面的圖,定義widget的html結構。
借用了bootstrap中panel的樣式,結構如下。
直接應用html.partial或html.renderpartial輔助方法比較簡單。
開啟之前建好的views/mvcdemo/index.cshtml檔案,新增如下內容:
顯示結果:
通過html.action/html.renderaction使用稍微複雜一點,分成兩步。
在要顯示的view所對應的controller中心增加乙個action.
還用上面這個頁面,我們在mvcdemocontroller.cs中增加乙個action
做個簡單的說明:
[childactiononly] 表示這個action只應作為子操作進行呼叫。也就是說直接通過 controller/action這樣的**是不能訪問的,會提示只能由子請求訪問的錯誤。
必須返回乙個partialview
在view中新增相關**
顯示結果和上一種方法一樣
當view中引用了乙個或多個分部檢視時,此view與各分部檢視預設得到一樣的資料,也就是說view及其中所有的partial view預設情況下共享view中的viewdata和viewbag.
需要使view和其中引入的partial view有不同的資料,需要通過html.action/html.renderaction輔助方法, 並在對於被呼叫的action中設定對應的資料。
另外還有幾點需要注意:
***和render***的區別在於,乙個是直接返回字串,另外乙個是直接寫入到相應輸出流,因此不能直接放在**表示式中,必須放在**塊中。
前面的示例中兩種寫法是等價的。render***有輕微的效能優勢,在大量的render***執行時,才能反映出效能上的優勢。
partial/renderpartial通常在單獨的資料夾中應用檢視標記來幫助view渲染檢視模型的一部分。
action/renderaction執行單獨controller中的action來顯示結果,提供了更多的靈活性,例如利用單獨的controller傳遞不同值。文章最後我們會舉個例子說明。
partial/renderpartial和action/renderaction的引數分別是 partialview和 action的名字。當然還有其他的過載函式,我們只說最常用的。應用時可以按照我們前面舉的例子。
最後我們舉個例子說明兩種用法的差別。
新建乙個partial view
controller中新建兩個action,shareddatedemo和partialviewdate.
根據shareddatedemo生成主view, partialviewdate供html.action呼叫
主view: shareddatedemo.cshtml分別顯示
主view的時間;
用html.partial呼叫partial view的時間;
用html.action呼叫partial view的時間。
顯示結果:
上面結果可以清晰的看到:
view及其中所有的partial view預設情況下共享view中的viewdata和viewbag
可以通過html.action, 配合被呼叫的action改變傳遞不同的資料
本次我們主要講解了partial view這一實用功能的使用。
html.partial使用方便,在不需要改變資料內容時非常方便。
html.action 使用更加靈活,可以根據業務要求按需定製partial view顯示內容。
請充分理解本篇文章所講的幾個例子。
好了,今天就到這裡。
MVC5 EF6 入門完整教程
mvc5 ef6 入門完整教程 第0課 從0開始 asp.net mvc開發模式和傳統的webform開發模式相比,增加了很多 約定 直接講這些 約定 會讓人困惑,而且東西太多容易忘記。和微軟官方教程不同,筆者盡量不用腳手架,從空白框架開始,一步一步新增功能,每次新增的東西剛好夠用,讓大家能真正能用...
MVC5 EF6 入門完整教程
原文 mvc5 ef6 入門完整教程 第0課 從0開始 asp.net mvc開發模式和傳統的webform開發模式相比,增加了很多 約定 直接講這些 約定 會讓人困惑,而且東西太多容易忘記。和微軟官方教程不同,筆者盡量不用腳手架,從空白框架開始,一步一步新增功能,每次新增的東西剛好夠用,讓大家能真...
MVC5 EF6 入門完整教程
第0課 從0開始 asp.net mvc開發模式和傳統的webform開發模式相比,增加了很多 約定 直接講這些 約定 會讓人困惑,而且東西太多容易忘記。和微軟官方教程不同,筆者盡量不用腳手架,從空白框架開始,一步一步新增功能,每次新增的東西剛好夠用,讓大家能真正能用起來,理解每乙個過程。本系列文章...