ASP.NET MVC Controller 向 View 传递数据的方法

本文主要探讨了在ASP.NET MVC2框架中,Controller如何向View传递数据的三种常见方法:ViewData、ViewBag以及使用ViewModel。
在ASP.NET MVC2中,Controller与View之间的数据传递是实现视图层动态展示的关键。以下是这三种方式的详细解释:
1. ViewData
ViewData是一种基于弱类型的Dictionary对象,用于临时存储数据,从Controller传递到View。当Controller中的方法处理完请求后,可以通过ViewData将数据存储为键值对,然后在View中通过相应的键来访问这些数据。例如,在Controller中:
```csharp
public ActionResult ViewDataWay(int id)
{
Book book = bookRepository.GetBook(id);
ViewData["Countries"] = new SelectList(PhoneValidator.Countries, book.Country);
return View(book);
}
```
这里,`ViewData["Countries"]`被赋值为一个SelectList对象,用于创建一个下拉列表。在View中,可以这样获取并使用ViewData中的数据:
```html
<div class="editor-field">
<%= Html.DropDownList("Country", ViewData["Countries"] as SelectList) %>
<%: Html.ValidationMessageFor(model => model.Country) %>
</div>
```
请注意,ViewData是弱类型的,因此在从ViewData中取出数据时需要进行类型转换。
2. ViewBag (在MVC3及更高版本中引入)
ViewBag是ViewData的动态版本,它提供了更简洁的语法,但本质上还是基于ViewData的工作原理。使用ViewBag时,不需要显式地指定数据类型,因为它是基于DynamicViewData类的。示例代码如下:
```csharp
public ActionResult ViewBagWay(int id)
{
Book book = bookRepository.GetBook(id);
ViewBag.Countries = new SelectList(PhoneValidator.Countries, book.Country);
return View(book);
}
```
在View中访问ViewBag与ViewData类似,只是不需要类型转换:
```html
<div class="editor-field">
<%= Html.DropDownList("Country", (SelectList)ViewBag.Countries) %>
<%: Html.ValidationMessageFor(model => model.Country) %>
</div>
```
3. ViewModel
ViewModel是一种更推荐的数据传递方式,它涉及到创建一个专门用于某个View的模型类。ViewModel类包含了Controller需要传递给View的所有数据,这样可以使代码更清晰,更具可维护性。例如,我们可以定义一个BookViewModel类:
```csharp
public class BookViewModel
{
public Book Book { get; set; }
public SelectList Countries { get; set; }
public BookViewModel(Book book)
{
Book = book;
Countries = new SelectList(PhoneValidator.Countries, book.Country);
}
}
```
然后在Controller中使用ViewModel:
```csharp
public ActionResult ViewModelWay(int id)
{
BookViewModel viewModel = new BookViewModel(bookRepository.GetBook(id));
return View(viewModel);
}
```
在View中,可以直接访问ViewModel的属性:
```html
<div class="editor-field">
<%= Html.DropDownListFor(model => model.Book.Country, Model.Countries) %>
<%: Html.ValidationMessageFor(model => model.Book.Country) %>
</div>
```
ViewModel的优点在于,它允许你封装业务逻辑,提供强类型的安全性,并且更易于测试和重构。
总结来说,ASP.NET MVC2中Controller向View传递数据的方式各有优缺点。ViewData和ViewBag方便快捷,但可能导致代码难以维护;而ViewModel虽然需要额外创建类,但能提供更好的组织结构和类型安全。在实际项目开发中,通常会根据需求选择最适合的方法。
相关推荐







wlangles
- 粉丝: 0
最新资源
- USB调试下SD卡互换与复原教程
- 简单安装指南:PCI并口卡驱动使用教程
- 数据结构课程设计:广东工业大学图书管理系统开发
- MATLAB神经网络30个经典案例分析
- 动态选项菜单的Android Tabhost小程序
- 探索Access数据库查询分析器的强大功能
- TortoiseSVN 1.7.10.23359中文版发布
- 自定义Uploadify插件的错误信息提示
- EPSON L系列打印机清零方法详解
- TD920手机升级工具:8809刷机工具详解
- OrCAD10.5培训资料:电子硬件工程师必学
- GGhost硬盘安装器硬盘备份还原教程
- PC-Lint 9:C/C++开发者的静态代码检查神器
- 51单片机语音录放系统设计与实现
- Java开发必备:MySQL、Oracle、SQL Server数据库jar包集合
- RetLang 1.0.6: .Net环境下的Actor模型实现
- JAVA开发实现多进制转换工具V1.0
- 国防李剑编著《C#语言Windows程序设计》课件介绍
- 拖动GridView项至任意位置的无bug演示
- QQ邮件搜索工具:在线使用及性别筛选功能
- Zend Studio 7 汉化包:简单安装汉化你的开发环境
- 汽车用品网站模板及源码下载
- Android后台录像示例教程与实现
- Windows7一键还原工具:GGhost操作体验