天天看點

MVC傳值方式Controller--->ViewController <--->Controller

Controller--->View

 Razor中的關鍵字 @model 

控制器中:

public class ProductsController: Controller
    {
        
        public ActionResult index()
        {
            var categories = northwind.Categories.ToList();
            return View(categories);
        } 
    } 
           

視圖中:

你隻需要在檔案首部寫上"@model強類型模型類"

MVC傳值方式Controller--->ViewController <--->Controller

ViewData

      擷取或設定一個字典,其中包含在控制器和視圖之間傳遞的資料。使用ViewData是采用鍵值對的形式,對所定義的資料進行傳遞。在View中會自動識别到擁有唯一鍵值的ViewData,并将資料顯示出來。

定義

<span style="font-size:18px;">publicViewDataDictionary ViewData {
    get {
        if(_viewData == null) {
            SetViewData(newViewDataDictionary());
        }
        return_viewData;
    }
    set {
        SetViewData(value);
    }
}</span>
           

ViewBag

      擷取視圖包,允許自定義屬性進行指派,屬于動态類型(dynamic),以ViewBag.屬性=屬性值得方式進行傳值,其實這裡跟ViewData的使用原理類似。

定義

<span style="font-size:18px;">public dynamic ViewBag {
    get {
        if(_dynamicViewData == null) {
            _dynamicViewData= new DynamicViewDataDictionary(() => ViewData);
        }
        return_dynamicViewData;
    }
}</span>
           

ViewBag與ViewData之間的差別

      1、ViewData是字典類型,指派方式用字典方式,通過key值讀取對應的value,ViewData["myName"]

      2、ViewBag是動态類型,使用時直接添加屬性指派即可ViewBag.myName

      3、ViewBag和ViewData隻在目前Action中有效,等同于View

      4、ViewData和ViewBag中的值可以互相通路,因為ViewBag的實作中包含了ViewData

Controller <--->Controller

TempData傳值

      TempData預設是使用Session來存儲臨時資料的,TempData中存放的資料隻一次通路中有效,一次通路完後就會删除了的。這個一次通路指的是一個請求到下一個請求,因為在下一個請求到來之後,會從Session中取出儲存在裡面的TempData資料并指派給TempData,然後将資料從Session中删除。

<span style="font-size:18px;">        public ActionResult Index1()
        {
            this.TempData["Name"] = "cwl";
            return View();
        }
        public ActionResult Index2()
        {
            string name = this.TempData["Name"].ToString();
            return View();
        }  </span>
           

繼續閱讀