【公告】網站目前停止所有的課程訂閱服務,原有學員權益不受影響,造成不便還請見諒,我們正在打造更多課程以及圖書,未來將會合併且擴充目前的課程內容,提供全新課程訂閱服務,感謝學員的支持。

ASP.NET 實務入門 - 控制器(Controller)與檢視(View)資料傳遞

在Razor 快速說明教學之後,這一堂開始我們要進一步討論控制器與檢視的溝通。

控制器經常需要將資料傳遞檢視,由檢視進一步整合轉換成標準的 HTML 網頁內容,最後經由網路傳送至使用者瀏覽器。當控制器需要將資料傳遞至檢視的時候,有兩種基本的方式,分別是 1.ViewBag ,或是 2.將其包裝成動作方法參數,傳入送出的檢視檔案。



上述圖示說明其中的過程,View 方法的 parameter 為傳遞至檢視的參數,這必須是一個物件,考慮以下控制器的動作方法 OneMessage 內容:

public ActionResult OneMessage()
{
    ViewBag.CompanyName = "康廷數位|www.kangting.tw";
    object message = "ASP.NET MVC 商業開發實務";
    return View(message);
}

OneMessage 動作方法中,設定 ViewBag.CompanyName 為一指定的訊息字串「康廷數位 …」,然後再傳入另外一個物件變數「message」進入 View 方法中。開啟對應的檢視檔案,配置如下內容:

@model object
@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>OneMessage</title>
</head>
<body>
    <div>
        <p>@ViewBag.CompanyName</p>
        <p>@Model</p>
    </div>
</body>
</html>

一開始 @model 宣告為 object ,表示這個檢視頁會接受一個 object 型別的參數,也就是上述控制器於動作方法中,傳入 View 方法的參數型別,接下來在 body 元素中,以Razor 語法,分別指定 @ViewBag.CompanyName 與 @Model。前者 @ViewBag.CompanyName 取得控制器中指定的同名屬性值,而 @Model 則是傳入 View 的參數。


上圖說明 ViewBag 與 View 方法參數對應至檢視的關係,這裏要特別注意,控制器的動作方法中,傳入 View 的參數被視為模型物件,檢視中一開始的 @model表示宣告這個檢視頁面將接受的參數型別,以小寫字首 model 標示,而在頁面內容當中如果要引用模型取出其值,則需為大寫字首 Model 這會取出其值。