仅供自己学习用:
在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种方式。下次将会给大家分享视图向控制器提交数据的几种方式。新闻热点
疑难解答