仅供自己学习用:
在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数据时,一般需要进行数据的类型转换。
站点名称:@(ViewData["Name"])
网站地址:@(ViewData["Ads"])
@{ Person person=ViewData["person"] as Person; } 所属人:@(person.name) 性别: @(person.sex)
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();
} }
}视图中读取数据: 站点名称:@(TempData["Name"])
网站地址:@(TempData["Ads"])
@{ Person person=TempData["person"] as Person; } 所属人:@(person.name) 性别: @(person.sex)
通过上述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 站点名称:@(TempData["Name"])
网站地址:@(TempData["Ads"])
@{ Person person=TempData["person"] as Person; } 所属人:@(
Model.name) 性别: @(
Model.sex)
如上,传递实例化对象时,控制器将ViewDataDictionary类的实例化对象的Model属性设置为需要被传递的对象;在视图 中只要读取Model属性,就可以获得控制器中的实例化对象。
总结:从控制器向视图传递数据可以使用
ViewData,TempTata和Model 3种方式。下次将会给大家分享视图向控制器提交数据的几种方式。