在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
)
Parameters
items
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/