1. 程式人生 > >ASP.NET MVC 重點教程一週年版 第四回 向View傳值

ASP.NET MVC 重點教程一週年版 第四回 向View傳值

一、ViewData與TempData屬性來向View頁傳遞物件


上文中已經提到,使用ViewData可以將資料由Controller傳遞到View
在前文中我們建立了EiceController類
在本文的示例中我們將這個Controller改一下

   public class EiceController : Controller
    {
        public ActionResult Index()
        {
            ViewData["ViewData"] = "在這裡顯示ViewData";
            TempData["TempData
"] = "在這裡顯示TempData"; return View(); } public ActionResult Index2() { return View("Index"); //這裡指定了規定顯示的View檔案即Eice目錄下的Index.aspx } }

我們將Index的引數移除,並提供了ViewDataTempData的賦值
在Views/Eice/Index.aspx這個View中我們寫以下程式碼

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> Index </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 1:<%=ViewData["ViewData"]%><br /> 2:<%=TempData["TempData"]%> </asp:Content>

注意上面的1.2不是行號,是我寫的。

接下來我們執行工程
訪問http://localhost/Eice/Index
可以看到執行得到以下

1.在這裡顯示ViewData
2.在這裡顯示TempData

再訪問http://localhost/Eice/Index2
顯示結果為

1.
2.在這裡顯示TempData

這裡1顯示是的ViewData中的內容,2為TempData傳遞的內容

我們可以看到ViewData只能在當前Action中有效
但是TempData可以類似於Session一樣到其它頁面仍然存在,但只限一頁的訪問(類似於Monorail中的Flash)
TempData一般用於臨時的快取內容或丟擲錯誤頁面時傳遞錯誤資訊。

二、通過ViewData.Model來傳遞物件

我們先建立一個Model:EiceIndexModel.cs。

    public class EiceIndexModel
    {
        /// <summary>
        /// 姓名
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 性別
        /// </summary>
        public bool  Sex { get; set; }
    }

之後我們建立一個新的Action:Index3

        public ActionResult Index3(){
            var m = new EiceIndexModel
            {
                Name = "鄒健",
                Sex = true
            };
            return View(m);
        }

我們下面為Index3建立View檔案,仍然是在Index3上點選右鍵AddView

image

於是自動生成了一個View檔案,我們執行看結果:

image

如果我們想要顯示其它的檔案我們應該怎麼辦呢?