ASP.NET MVC2中Controller向View传递数据的方式

来源:互联网 发布:java sftp下载 编辑:程序博客网 时间:2024/04/30 19:30

在Asp.net mvc开发中,Controller需要向View提供Model,然后View将此Model渲染成HTML。

这篇文章介绍由Controller向View传递数据的方式,实现一个DropDownList的显示。

 第一种:ViewData

  ViewData是一个Dictionary。使用非常简单,看下面代码:


List<SelectListItem> List = new List<SelectListItem>{    new SelectListItem(){ Text="ViewDataWay1", Value="ViewDataWay1"},    new SelectListItem(){ Text="ViewDataWay2", Value="ViewDataWay2"},    new SelectListItem(){ Text="ViewDataWay3", Value="ViewDataWay3", Selected=true},    new SelectListItem(){ Text="ViewDataWay4", Value="ViewDataWay4"},};ViewData["ViewData"] = List; 
在View中使用下面代码取值:
<%= Html.DropDownList("ViewData")%>

第二种:TempData

  使用TempData和使用ViewData方法是一样的。

List<SelectListItem> List = new List<SelectListItem>{    new SelectListItem(){ Text="ViewDataWay1", Value="ViewDataWay1"},    new SelectListItem(){ Text="ViewDataWay2", Value="ViewDataWay2"},    new SelectListItem(){ Text="ViewDataWay3", Value="ViewDataWay3", Selected=true},    new SelectListItem(){ Text="ViewDataWay4", Value="ViewDataWay4"},};TempData["TempData"] = new SelectList(List, "Value", "Text", "ViewDataWay4"); 

View取值的代码如下:

 <%= Html.DropDownList("Country", TempData["TempData"] as SelectList)%>

注意:不能在action里面这样写:

TempData["ViewData"] = List;

不能在View里面这样写:

<%= Html.DropDownList("ViewData")%>

否则会报错:

不存在具有键“Country”的“IEnumerable<SelectListItem>”类型的 ViewData 项。


public SelectList(IEnumerable items,string dataValueField,string dataTextField,Object selectedValue)Parametersitems    Type: System.Collections.IEnumerable    The items.dataValueField    Type: System.String    The data value field.dataTextField    Type: System.String    The data text field.selectedValue    Type: System.Object    The selected value.使用这个SelectList构造函数,第四个参数就是选中项的值:http://msdn.microsoft.com/en-us/library/dd492553.aspx

=============================================================

ViewData和TempData的区别:

不管它们是否基于session 在用法上最大的区别在于 ViewData用于action方法与前台页面传值使用,TempData除了有viewData的功能外也可以在action方法之间传递值(在本controller里可以传递 跨contoller也是可以的)也可以在重新定向后赋予定向方法的前台页面。


http://www.cnblogs.com/chengxiaohui/articles/1916647.html
http://kb.cnblogs.com/page/69952/


原创粉丝点击