码迷,mamicode.com
首页 > Web开发 > 详细

MVC Controller向View传值(ViewData与ViewBag)

时间:2018-07-20 11:36:27      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:如何   str   text   ring   result   mvc   告诉   var   就会   

近在开发项目中,使用的是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了!

MVC Controller向View传值(ViewData与ViewBag)

标签:如何   str   text   ring   result   mvc   告诉   var   就会   

原文地址:https://www.cnblogs.com/liujicai/p/9339743.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!