MVC传值方式

Controller--->View

 Razor中的关键字 @model 

控制器中:

  

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

视图中:

你只需要在文件首部写上"@model强类型模型类"


MVC传值方式_第1张图片

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>


ViewBagViewData之间的区别

      1ViewData是字典类型,赋值方式用字典方式,通过key值读取对应的valueViewData["myName"]

      2
ViewBag是动态类型,使用时直接添加属性赋值即可ViewBag.myName

      3
ViewBagViewData只在当前Action中有效,等同于View

      4
ViewDataViewBag中的值可以互相访问,因为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>



你可能感兴趣的:(mvc,传值方式)