ASP.Net MVC開發基礎學習筆記(10):分部檢視PartialView
前言
本節我們來看分部檢視PartialView的用法。首先我們會建立一個簡單的靜態分部檢視。然後向這個檢視中傳入Model資料,使其變成動態分部檢視。接下來介紹使用ChildAction來呼叫分部檢視,這樣就可以加入一些對資料的分析處理。最後介紹用ajax無重新整理更新分部檢視資料以達到更好的使用者體驗。
簡單分部檢視
建立一個PartialView,在解決方案資源管理器中右鍵點選Shared資料夾選擇新增->MVC 5 分部頁(Razor)。如下圖所示:
檔案命名為PartialPage.cshtml,寫入如下程式碼:
<h2>This is a partial page.</h2>
這樣我們就建立好了一個簡單的分部檢視,現在我們來建立一個Controller和View來呼叫它。
在Controllers資料夾下建立PartialViewController.cs並寫入如下程式碼:
- using System.Web.Mvc;
- namespace SlarkInc.Controllers
- {
- public class PartialViewController : Controller
- {
- public ActionResult Index()
- {
- return View();
- }
- }
- }
一個最簡單的Controller,就是為了讓大家好理解。
右鍵點選上面的"Index"函式名,選擇新增檢視。系統會在~\Views\PartialView\資料夾下建立Index.cshtml檔案,在這個檔案中寫入如下程式碼:
- @{
- Layout = null;
- }
- <h2>Before PartialView</h2>
- <hr />
- @Html.Partial("PartialPage")
- <hr />
- @{
- Html.RenderPartial("PartialPage");
- }
- <hr />
- <h2>After PartialView</h2>
其顯示效果如下圖所示:
上面程式碼中第1-3行表示在分部檢視中不用載入模板。<hr />是下圖所示的分隔線。
從下面顯示結果可以看出,PatialPage.cshtml中的內容被顯示了兩次,這對應兩個不同的呼叫分部檢視的函式。第6行Html.Partial函式的作用是返回所呼叫的PartialView中的內容。其所在的View會負責輸出其返回的內容。而第9行的程式碼則是直接輸出所呼叫的PartialView中的內容。
如果還是不清楚Partial和RenderPartial的關係,可以這樣類比:比如我們有一個string叫s,Partial和RenderPartial的關係就相當於s.ToString()和Response.Write(s.ToString())的關係一樣。前者是返回內容,後者是輸出內容。
帶Model的分部檢視
前面只是建立了一個靜態分部檢視,下面我們來把它改造一下來顯示Model資料。
修改~\Views\PartialView\Index.cshtml檔案,程式碼如下:
- @{
- Layout = null;
- }
- <h2>Before PartialView</h2>
- <hr />
- @Html.Partial("PartialPage",1)
- <hr />
- @{
- Html.RenderPartial("PartialPage",2);
- }
- <hr />
- <h2>After PartialView</h2>
上面的第6和9行,加入了第二個引數,是一個數字。這個數字就是我們要傳給PartialView的Model。
修改~\Views\Shared\PartialView.cshtml檔案,內容如下:
@model int
<h2>This is a partial page @Model.</h2>
第1行表示傳入的model是int型別。第2行吧這個數字顯示出來。
顯示結果如下:
使用ChildAction呼叫分部檢視
前面呼叫PartialView的方式都是通過一個View來呼叫PartialView。下面我們來介紹通過View呼叫ChildAction來返回PartialView。
首先在PartialViewController.cs裡面寫一個ChildAction程式碼如下:
- [ChildActionOnly]
- public PartialViewResult ChildAction(DateTime time)
- {
- string greetings = string.Empty;
- if(time.Hour > 18)
- {
- greetings = "Good evening. Now is " + time.ToString("HH:mm:ss");
- }
- else if (time.Hour > 12)
- {
- greetings = "Good afternoon. Now is " + time.ToString("HH:mm:ss");
- }
- else
- {
- greetings = "Good morning. Now is " + time.ToString("HH:mm:ss");
- }
- return PartialView("ChildAction",greetings);
- }
第1行,在ChildAction函式的前面寫上[ChildActionOnly]表示這個Action只能作為ChildAction使用。
ChildAction返回partialView的好處就是在Action裡可以做一些處理和控制。這裡第4到16行就是根據獲得的時間返回不同的問候語。
第17行返回其對應的PartialView並傳入greetings作為Model。
右鍵點選ChildAction函式名選擇建立檢視,取名為ChildAction。寫入如下程式碼:
@model string
<h2>@Model</h2>
這個PartialView很簡單,就是把傳入的Model顯示出來。
修改~\Views\PartialView\Index.cshtml檔案,程式碼如下:
- @{
- Layout = null;
- }
- <h2>Before PartialView</h2>
- <hr />
- @Html.Action("ChildAction", new { time = DateTime.Now })
- <hr />
- @{
- Html.RenderAction("ChildAction", new { time = DateTime.Now.AddHours(12) });
- }
- <hr />
- <h2>After PartialView</h2>
如圖中黃色所示,呼叫ChildAction同樣有兩種方法,Html.Action和Html.RenderAction。它們的區別跟Partial和RenderPartial是一樣的。這兩個函式的第一個引數是要呼叫的ChildAction的名字,第二個引數是要傳遞的引數。引數是用匿名物件的方法建立的Object。
執行結果如下:
ajax無重新整理更新分部檢視
要通過ajax來呼叫ChildAction返回PartialView,首先要去掉ChildAction開頭寫的[ChildActionOnly]。因為這種呼叫方法不算ChildAction呼叫。
然後修改~\Views\PartialView\Index.cshtml檔案,程式碼如下:
- @{
- Layout = null;
- }
- <script src="~/Scripts/jquery-1.10.2.js"></script>
- <h2>Before PartialView</h2>
- <hr />
- <div id="header"></div>
- <hr />
- <h2>After PartialView</h2>
- <script>
- setInterval(LoadAction, 1000);
- function LoadAction()
- {
- var time = new Date();
- $.ajax({
- type: "POST",
- url: '@Url.Action("ChildAction", "PartialView")',
- data: { time: time.getHours() + ":" + time.getMinutes() + ":" + time.getSeconds()},
- datatype: "json",
- success: function (data) {
- $('#header').html(data);
- },
- error: function (XMLHttpRequest, textStatus, errorThrown) {
- alert(errorThrown);
- }
- });
- }
- </script>
顯示的結果如下圖所示,問候語和時間會每秒更新並且頁面不重新整理。
上面程式碼中15-27行用到了Jquery的ajax方法獲取資料。第17行url的值是ChildAction對應的路由。第18行傳遞的資料是名為time的當前時間。第21行,如果成功獲取資料則將資料顯示出來。
第11行,通過SetInterval函式每秒呼叫一次LoadAction函式,更新一次資料。
這樣就完成了無重新整理更新區域性頁面資料。
相關文章
- ASP.NET Core 5.0 MVC中的檢視分類——佈局檢視、啟動檢視、具體檢視、分部檢視ASP.NETMVC
- ASP.NET MVC學習筆記:(一)路由匹配ASP.NETMVC筆記路由
- CSS 基礎學習筆記CSS筆記
- node基礎學習筆記筆記
- Python基礎學習筆記Python筆記
- Java基礎學習筆記Java筆記
- Web基礎學習筆記Web筆記
- ASP.NET MVC Razor檢視引擎ASP.NETMVC
- ASP.NET MVC – 檢視簡介ASP.NETMVC
- 基於ASP.NET core的MVC站點開發筆記 0x01ASP.NETMVC筆記
- Linux基礎學習-Docker學習筆記LinuxDocker筆記
- 【學習】SQL基礎-015-檢視SQL
- ASP.NET MVC 學習筆記-7.自定義配置資訊ASP.NETMVC筆記
- 零基礎ASP.NET Core MVC外掛式開發ASP.NETMVC
- 零基礎學習Java開發,這些學習筆記送給你!Java筆記
- 零基礎學習Java開發,這些學習筆記送給你Java筆記
- Spring MVC學習筆記二SpringMVC筆記
- 【學習筆記】mvc與mvvm筆記MVCMVVM
- Django 原始碼閱讀筆記(基礎檢視)Django原始碼筆記
- python基礎學習筆記(一)Python筆記
- 基礎 IO (Linux學習筆記)Linux筆記
- MySQL學習筆記【基礎篇】MySql筆記
- 基礎知識學習筆記筆記
- 彙編基礎學習筆記筆記
- DI、IOC基礎學習筆記筆記
- JavaWeb基礎-學習筆記02JavaWeb筆記
- Java基礎-學習筆記17Java筆記
- Java基礎-學習筆記07Java筆記
- Java基礎-學習筆記06Java筆記
- Java基礎-學習筆記05Java筆記
- Java基礎-學習筆記04Java筆記
- JavaScript學習筆記——基礎部分JavaScript筆記
- JAVA基礎學習筆記 一 計算機基礎、JAVA開發環境、開發注意事項Java筆記計算機開發環境
- ASP.NET Core MVC 之檢視(Views)ASP.NETMVCView
- iOS學習筆記04 檢視切換iOS筆記
- 安卓初學基礎學習筆記安卓筆記
- Spring 學習筆記(3)Spring MVCSpring筆記MVC
- Ansible學習筆記——基礎與配置筆記