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

在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/


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值