前言

在项目中经常使用到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[""]

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

HtmlHelper—DropDownList:SelectList、SelectListItem的更多相关文章

  1. ASP.Net MVC开发基础学习笔记:二、HtmlHelper与扩展方法

    一.一个功能强大的页面开发辅助类—HtmlHelper初步了解 1.1 有失必有得 在ASP.Net MVC中微软并没有提供类似服务器端控件那种开发方式,毕竟微软的MVC就是传统的请求处理响应的回归. ...

  2. MVC扩展HtmlHelper,加入RadioButtonList、CheckBoxList、DropdownList

    代码: using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions ...

  3. C#进阶系列——一步一步封装自己的HtmlHelper组件:BootstrapHelper(三:附源码)

    前言:之前的两篇封装了一些基础的表单组件,这篇继续来封装几个基于bootstrap的其他组件.和上篇不同的是,这篇的有几个组件需要某些js文件的支持. 本文原创地址:http://www.cnblog ...

  4. C#进阶系列——一步一步封装自己的HtmlHelper组件:BootstrapHelper

    前言:之前学习过很多的Bootstrap组件,博主就在脑海里构思:是否可以封装一套自己Bootstrap组件库呢.再加上看到MVC的Razor语法里面直接通过后台方法输出前端控件的方式,于是打算仿照H ...

  5. ASP.Net WebForm温故知新学习笔记:二、ViewState与UpdatePanel探秘

    开篇:经历了上一篇<aspx与服务器控件探秘>后,我们了解了aspx和服务器控件背后的故事.这篇我们开始走进WebForm状态保持的一大法宝—ViewState,对其刨根究底一下.然后,再 ...

  6. ASP.Net WebForm温故知新学习笔记:一、aspx与服务器控件探秘

    开篇:毫无疑问,ASP.Net WebForm是微软推出的一个跨时代的Web开发模式,它将WinForm开发模式的快捷便利的优点移植到了Web开发上,我们只要学会三步:拖控件→设属性→绑事件,便可以行 ...

  7. ASP.Net WebForm学习笔记:一、aspx与服务器控件探秘

    作者:周旭龙 出处:http://edisonchou.cnblogs.com 开篇:毫无疑问,ASP.Net WebForm是微软推出的一个跨时代的Web开发模式,它将WinForm开发模式的快捷便 ...

  8. MyBatis从入门到放弃六:延迟加载、一级缓存、二级缓存

    前言 使用ORM框架我们更多的是使用其查询功能,那么查询海量数据则又离不开性能,那么这篇中我们就看下mybatis高级应用之延迟加载.一级缓存.二级缓存.使用时需要注意延迟加载必须使用resultMa ...

  9. JAVAEE——Mybatis第一天:入门、jdbc存在的问题、架构介绍、入门程序、Dao的开发方法、接口的动态代理方式、SqlMapConfig.xml文件说明

    1. 学习计划 第一天: 1.Mybatis的介绍 2.Mybatis的入门 a) 使用jdbc操作数据库存在的问题 b) Mybatis的架构 c) Mybatis的入门程序 3.Dao的开发方法 ...

随机推荐

  1. iOS - OC NSTimeZone 时区

    前言 @interface NSTimeZone : NSObject <NSCopying, NSSecureCoding> NSTimeZone 表示时区信息. 1.NSTimeZon ...

  2. Python中的join()函数split()函数

    函数:string.join() Python中有join()和os.path.join()两个函数,具体作用如下:     join():    连接字符串数组.将字符串.元组.列表中的元素以指定的 ...

  3. Android控件之AutoCompleteTextView(自动匹配输入的内容)

    一.功能 动态匹配输入的内容,如百度搜索引擎当输入文本时,可以根据内容显示匹配的热门信息 二.独特属性 android:completionThreshold = "2"    — ...

  4. 20160815_Redis安装

    OS: CentOS6.4(x64) 参考网址: http://www.cnblogs.com/haoxinyue/p/3620648.html http://www.codeceo.com/arti ...

  5. static final的理解

    static: static静态,可以修饰类,成员变量,成员方法,代码块.static修饰的成员变量和方法独立于该类的任何对象,也就是被类的所有成员共享,这要这个类被加载,虚拟机就能根据类名在运行时数 ...

  6. 栈 - 从零开始实现by C++

    参考链接:数据结构探险-栈篇 学了队列之后,栈就很简单了,换汤不换药.   栈 栈的模型 后进先出(电梯,进制转换,括号的匹配检测)   栈的基本元素 栈顶,栈底(一般很少用到),栈容量,栈长度 注意 ...

  7. graph-tool文档(一)- 快速开始使用Graph-tool - 3.图的过滤

    目录: 图的过滤 图视图 -- 组合图视图 名词解释: filter:过滤 mask:屏蔽 inverted parameter:倒参数 overhead:开销 minimum spanning tr ...

  8. C/C++中堆与栈

    本文介绍C/C++中堆,栈及静态数据区.   五大内存分区 在C++中,内存分成5个区,他们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区.下面分别来介绍: 栈,就是那些由编译器在需要的时候分 ...

  9. AC自动机 & Fail树 专题练习

    Fail树就是AC自动机建出来的Fail指针构成的树. [bzoj3172][xsy1713]单词 题意 给定一些单词,求每个单词在所有单词里面的出现次数. 分析 构建Fail树,记录每个单词最后一个 ...

  10. 设置DIV最小高度以及高度自适应随着内容的变化而变化

    <!--退租账单--> <div id="bilsli" onmouseover="showBill(this)"> #bilsli{ ...