前言

在项目中经常使用到DropDownList来显示数据库中的数据,典型的例子为为某书籍选择所属类型。

使用SelectList来实现:

实现一:

Controller 代码

SelectList selectList = new SelectList(bookshelper.GetCategoryList());
ViewData["Category"] = selectList;

View代码

@Html.DropDownList("Category",(SelectList) ViewData["Category"])

生成代码:

<select id="Category" name="Category">
<option>ImageOfTaiWan.Entity.Category</option>
<option>ImageOfTaiWan.Entity.Category</option>
<option>ImageOfTaiWan.Entity.Category</option>
</select>

注意上面的选择列表实际上为选项类型了,并不是我们想要的具体内容。

那怎么搞呢?

实现二:

Controller代码:

SelectList selectList = new SelectList(
bookshelper.GetCategoryList().Select(item =>item.Name));

View代码不变

生成Html代码:

<select id="Category" name="Category">
<option>戏剧</option>
<option>小说</option>
<option>历史</option>
</select>

上述代码在页面上已经完全可以显示,但是如果再将表单提交到后台那么只能获取到具体的值,而我们需要的是值的ID。

这时候就需要使用SelectList的另外一个构造函数:

//
// 摘要:
// 使用列表的指定项、数据值字段、数据文本字段和选定的值来初始化 System.Web.Mvc.SelectList 类的新实例。
//
// 参数:
// items:
// 各个项。
//
// dataValueField:
// 数据值字段。
//
// dataTextField:
// 数据文本字段。
//
// selectedValue:
// 选定的值。
public SelectLit(IEnumerable items, string dataValueField, string dataTextField, object selectedValue);

实现三:

将Controller代码修改为:

SelectList selectList = new SelectList(item, "Id","Name");
ViewData["Category"] = selectList;

生成的Html代码:

<select id="Category" name="Category">
<option value="3">戏剧</option>
<option value="2">小说</option>
<option value="1">历史</option>
</select>

自此,我们已经完全实现了功能

如果是在编辑页,则需要让下拉列表框默认选择一项,那么这个功能需要为SelectList的构造函数添加第四个参数selectedValue

Entity.Books books = bookshelper.GetById(id);
var item = bookshelper.GetCategoryList();
SelectList selectList = new SelectList(item, "Id","Name",books.Category);
ViewData["Category"] = selectList;

则生成的html代码为:

<select id="Category" name="Category">
<option value="3">戏剧</option>
<option selected="selected" value="2">小说</option>
<option value="1">历史</option>
</select>

使用SelectListItem来实现

实现四:

Controller代码:

IEnumerable<SelectListItem> items =
bookshelper.GetCategoryList().Select(item => new SelectListItem { Value = item.Id.ToString(), Text = item.Name });

View代码:

@Html.DropDownList("Category",(IEnumerable<SelectListItem>) ViewData["Category"])

生成的Html代码:

<select id="Category" name="Category">
<option value="3">戏剧</option>
<option value="2">小说</option>
<option value="1">历史</option>
</select>

2013年12月19日 14:05:13 更新

今天遇到问题是默认选项使用上面的方法怎么都选不中。

不知道是啥子原因,最好在网上看到这篇文章。http://www.daojia100.com/jingyan/info/50617f292e05e81684437e4a.aspx

所以在编辑页里得给对应的Id的表单元素添加其本身的ViewData[""]

具体是什么原因现在还不详!

最新文章

  1. 开源游戏“2048”IOS移植版
  2. Django1.8教程——安装Django
  3. [转]ps/2键盘线序识别方法
  4. PHP开发常见问题解决列表
  5. Quartz Scheduler(2.2.1) - Working with TriggerListeners and JobListeners
  6. 【Knockout】四、绑定上下文
  7. Android中通过代码获取arrays.xml文件中的数据
  8. SPI and API
  9. python 写csv文件
  10. CodePath Android CliffNotes 之 Effective Java for Android 翻译
  11. POJ-3723 Conscription---最大权森林---最小生成树
  12. 创建类似于Oracle中decode的函数
  13. 【转载】微软官方提供的Sqlserver数据库操作帮助类SQLHelper类
  14. 家庭记账本之微信小程序(三)
  15. linux下的C语言程序设计
  16. Java设置以及获取JavaBean私有属性进阶
  17. Android 抓包并通过 Wireshark 分析
  18. 《C++ Primer Plus》读书笔记之十—类和动态内存分配
  19. PHP debug_backtrace() 函数打印调用处的调试信息
  20. Mysql的日期转换成星期[某天对应周几]

热门文章

  1. ubuntu 14.0.04 通过自启动脚本实现主机和虚拟机的文件夹共享
  2. DDL和DML的定义和区别
  3. jQuery动态加载css文件实现方法
  4. hibernate模块
  5. Java JTable 表格 获取存储路径,文件名 ,导出excel表格
  6. ResponseUtil反射制造唯一结果
  7. PHP获取某年第几周的开始日期和结束日期
  8. java 多线程6(线程的&#183;通讯)
  9. 记一次基于Unity的Profiler性能分析
  10. 编译maxscale