zoukankan      html  css  js  c++  java
  • MVC Controller向View传值(ViewData与ViewBag)

    近在开发项目中,使用的是ASP.NET MVC由于之前并没有接触,对于它的传值方式有些陌生,在这里进行初步总结积累学习!

    一:使用

    ViewData使用:

    在使用上,我们可以很明显的看出这两种方式的区别,只是存取值得方式有些区别而已!

    public ActionResult Index()

    {

       List<string> colors = new List<string>();

       colors.Add("red");

       colors.Add("green");

       colors.Add("blue");

       ViewData["listColors"] = colors;

       ViewData["dateNow"]= DateTime.Now;

       ViewData["name"] = "hejingyuan";

       ViewData["age"]= 25;

       return View();

    }

    <p>

       My name is <b>@ViewData["name"] </b>,<b>@ViewData["age"] </b>years old.

       <br />

       I like the following colors:

    </p>

    <ul id="colors">

       @foreach (var color in ViewData["listColors"] as List<string>)

       {

       <li><font color="@color">@color </font></li>

       }

    </ul>

    <p>

       @ViewData["dateNow"]

    </p>

    public ActionResult Index()

    {

       List<string>colors = new List<string>();

       colors.Add("red");

       colors.Add("green");

       colors.Add("blue");

       ViewBag.ListColors = colors; //colors is List

       ViewBag.DateNow= DateTime.Now;

       ViewBag.Name= "hejingyuan";

       ViewBag.Age = 25;

       return View();

    }

    <p>

       My name is <b>@ViewBag.Name</b>, <b>@ViewBag.Age</b> years old.

       <br />

       I like the following colors:

    </p>

    <ul id="colors">

       @foreach (var color in ViewBag.ListColors)

       {

       <li><font color="@color">@color</font> </li>

       }

    </ul>

    <p>

       @ViewBag.DateNow

    </p>

    二,定义

    通过定义我们可以看出ViewBag 是ViewData的动态封装器,相当于在ViewData的基础上进行了封装处理。

    public dynamic ViewBag {

        get {

            if (_dynamicViewData == null) {

                _dynamicViewData = new DynamicViewDataDictionary(() => ViewData);

            }

            return _dynamicViewData;

        }

    }

     public ViewDataDictionary ViewData {

        get {

            if (_viewData == null) {

                SetViewData(new ViewDataDictionary());

            }

            return _viewData;

        }

        set {

            SetViewData(value);

        }

    }

    三:对比

    ViewData与ViewBag的区别

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

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

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

    4、ViewData和ViewBag中的值可以互相访问,因为ViewBag的实现中包含了ViewData

    注意:

    1,只有当要访问的关键字是一个有效的C#标识符时,ViewBag 才起作用。 

    例如,如果在ViewData["Key With Spaces"]中存放一个值,那么就不能使用ViewBag访问。因为这样根本就无法通过编译。

    2,动态值不能作为一个参数传递给扩展方法。因为C#编译器为了选择正确的扩展方法,在编译时必须知道每一个参数的真正类型。如果其中任何一个参数是动态的,那么就不会通过编译。

    例如,这行代码就会编译失败:@Html.TextBox("name",ViewBag.Name)。要使这行代码通过编译有两种方法:第一是使用ViewData["Name"],第二是把ViewBag.Name值转换为一个具体的型:(string)ViewBag.Name 。

    四:总结

    对于传值方式这个话题,对于大家来说应该是有些老套,因为只要接触过项目的人都很了解,这是一个非常基础的知识,在这里列出来,主要的目的也不是说要告诉大家如何如何传值,如何如何操作,然后要求大家记下来等,而是要通过上面的知识,告诉大家其实知识并没有我们想的那么高深莫测,所有的知识即使我们没有听说过,但只要我们花一些时间去研究,去总结,那么一切困难都变得easy了!

  • 相关阅读:
    hdu acm 2844 Coins 解题报告
    hdu 1963 Investment 解题报告
    codeforces 454B. Little Pony and Sort by Shift 解题报告
    广大暑假训练1 E题 Paid Roads(poj 3411) 解题报告
    hdu acm 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
    hdu acm 1114 Piggy-Bank 解题报告
    poj 2531 Network Saboteur 解题报告
    数据库范式
    ngnix 配置CI框架 与 CI的简单使用
    Vundle的安装
  • 原文地址:https://www.cnblogs.com/liujicai/p/9339743.html
Copyright © 2011-2022 走看看