首页 > 网站 > WEB开发 > 正文

控制器向视图传递数据的3种方式

2024-04-27 15:05:45
字体:
来源:转载
供稿:网友

仅供自己学习用:

asp.net MVC中,控制器和视图之间的数据传递包括两个方向:

将控制器设置的数据传递到视图中,在视图中显示数据;将视图中的数据传递到控制器 中,在控制器中读取、处理数据。今天先给大家讲讲控制器向视图传递数据:控制器向视图传递数据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的区别:ViewData的数据类型是ViewDataDictionary类的实例化对象,而TempData的数据类型则是TempDataDictionary类的实例化对象;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种方式。下次将会给大家分享视图向控制器提交数据的几种方式。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表