控制器與檢視資料傳送

ASP.NET Core Web 應用開發–使用 MVC 框架 / PART II MVC 的細節 / 控制器與檢視資料傳送

MVC中的控制器透過return View()回傳View之後,轉換成 HTML輸出,其中的如果通常會要將額外的資料同時送給檢視作呈現,可以利用ViewBag、ViewData或是TempData。

ViewBag是動態屬性,在控制器動作方法中,指定任意ViewBag自訂屬性名稱,然後設定屬性值,接下來在View檔案中透過屬性名稱即可將其值取出。

新增控制器ViewDemo,於其中定義動作方法ServerTime(),配置如下的內容:

public IActionResult ServerTime()
{
    ViewBag.ServerTime = DateTime.Now.ToShortTimeString();
    return View();
}

在ServerTime()中,ViewBag.ServerTime的ServerTime是自訂的ViewBag屬性,透過「.」引用即可設定,取得目前的時間資訊透過「=」設定給屬性。

ViewBag在控制器動作方法回傳檢視檔案時,可以由檢視檔案中進行讀取,現在切換至檔案ServerTime.cshtml,配置一行如下:

<p><span>伺服器時間</span><span>@ViewBag.ServerTime</span></p>

其中以「@」開始的ViewBag.ServerTime會取出上述的伺服器時間,那入span元素中,顯示在網頁上。

網頁最後回傳至瀏覽器進行解譯,由於動作方法於伺服器執行,因此取得的伺服器的時間。

下圖說明其中的過程:

當應用程式啟動,畫面中編輯器的部份於伺服器端執行,而@ViewBag.ServerTime在ServerTime.cshtml中取得伺服器當下的時間字串,結合p與span等HTML標籤,整合成為HTML內容,傳送至瀏覽器呈現結果。

ViewBag可以根據需求自行設定,例如設定一本書的基本資訊: 

ViewBag.Title = "Entity Framework Core 實務精要";
ViewBag.Price = 860;
ViewBag.Pdate = "2021/9/15";

在檢視頁依序如下設定可以取出:

書名:Entity Framework Core 實務精要
價格:860
出版日期:2021/9/15

而除了上述簡單的資料格式,甚至可以將物件直接設定給ViewBag進行設定,本系列一開始的「檢視檔案的組成 - Razor與HTML」已經示範請自行參考。

沒有留言: