1. 程式人生 > >控制器向檢視傳遞資料的3種方式

控制器向檢視傳遞資料的3種方式

僅供自己學習用:

在ASP.NET MVC中,控制器和檢視之間的資料傳遞包括兩個方向:

  1. 將控制器設定的資料傳遞到檢視中,在檢視中顯示資料;
  2. 將檢視中的資料傳遞到控制器 中,在控制器中讀取、處理資料。

今天先給大家講講控制器向檢視傳遞資料:
控制器向檢視傳遞資料ASP.NET框架中可以通過3種方式將資料從控制器傳遞到檢視。
1. 使用 ViewData 傳遞資料在ASP.NET MVC框架中,所有的控制器必須繼承Controller類,該類是ControllerBase的之類。根據ControllerBase類中的ViewData屬性,可以在控制器的相關動作方法中設定檢視資料字典的值(ViewDataDictionary)
例如,在"Home" 控制器的Index()動作方法中,設定ViewData檢視資料字典。namespace MvcApplication1:Controllers{     public class HomeController:Controller
    {
        public ActionResult  Index()
        {            ViewData["Name"]="程式碼裡";
            ViewData["Ads"]="www.daimali.com";
            ViewData["person"]=new Person{name="李四",sex="男"};
            return View();
        }    }
}示例中ViewData字典中儲存了2個字串和一個Person物件。在ViewData中儲存資料時都會轉換為Object,因此檢視中顯示ViewData資料時,一般需要進行資料的型別轉換。<html><head></head>
<body>    站點名稱:@(ViewData["Name"])
    網站地址:@(ViewData["Ads"])
    @{        Person person=ViewData["person"] as Person;    }        所屬人:@(person.name)     性別:  @(person.sex)
</body></html>
2. 使用TempData傳遞資料    根據ControllerBase類中的TempData屬性,同樣可以在控制器的相關動作方法中設定該TempData屬性的值。

例如,在"Home" 控制器的Index()動作方法中,設定TempData檢視資料字典。namespace MvcApplication1:Controllers{     public class HomeController:Controller
    {
        public ActionResult  Index()
        {            TempData["Name"]="程式碼裡";
            TempData["Ads"]="www.daimali.com";
            TempData["person"]=new Person{name="李四",sex="男"};
            return View();
        }    }
}檢視中讀取資料:<html><head></head><body>    站點名稱:@(TempData["Name"])
    網站地址:@(TempData["Ads"])
    @{        Person person=TempData["person"] as Person;    }        所屬人:@(person.name)     性別:  @(person.sex)
</body></html>
通過上述ViewData和TempData的舉例,大家可以看到,用法上完全一樣,只是字面上看起來不一樣而已,但是他們又是完全不同的兩種資料型別。
我們來比較一下ViewData和TempData的區別:
  1. ViewData的資料型別是ViewDataDictionary類的例項化物件,而TempData的資料型別則是TempDataDictionary類的例項化物件;
  2. ViewData 只在當前頁面訪問,無法跨頁傳遞;TempData則儲存在Session中,可以實現跨頁傳遞,且傳遞一次之後自動刪除。

不同點:  1. 型別不同  2. 訪問範圍不同,ViewData當前頁,TempData跨頁  3. 使用次數不同,TempData只能訪問一次  4. 儲存位置不同,TempData儲存在Session中。
3. 使用Model傳遞資料  通過在控制器的View()方法中傳遞例項化物件,可以將該物件傳遞到檢視中。
HomeController控制器程式碼:namespace MvcApplication1:Controllers{     public class HomeController:Controller
    {
        public ActionResult  Index()
        {            Person person=new Person{name="李四",sex="男"};
            return View(person);//傳遞物件
        }    }
}檢視中使用:@model Person<html><head></head><body>    站點名稱:@(TempData["Name"])
    網站地址:@(TempData["Ads"])
    @{        Person person=TempData["person"] as Person;    }        所屬人:@(Model.name)     性別:  @(Model.sex)
</body></html>
如上,傳遞例項化物件時,控制器將ViewDataDictionary類的例項化物件的Model屬性設定為需要被傳遞的物件;在檢視 中只要讀取Model屬性,就可以獲得控制器中的例項化物件。
總結:從控制器向檢視傳遞資料可以使用ViewData,TempTata和Model 3種方式。下次將會給大家分享檢視向控制器提交資料的幾種方式。