HtmlHelper—DropDownList:SelectList、SelectListItem
前言
在项目中经常使用到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的更多相关文章
- ASP.Net MVC开发基础学习笔记:二、HtmlHelper与扩展方法
一.一个功能强大的页面开发辅助类—HtmlHelper初步了解 1.1 有失必有得 在ASP.Net MVC中微软并没有提供类似服务器端控件那种开发方式,毕竟微软的MVC就是传统的请求处理响应的回归. ...
- MVC扩展HtmlHelper,加入RadioButtonList、CheckBoxList、DropdownList
代码: using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions ...
- C#进阶系列——一步一步封装自己的HtmlHelper组件:BootstrapHelper(三:附源码)
前言:之前的两篇封装了一些基础的表单组件,这篇继续来封装几个基于bootstrap的其他组件.和上篇不同的是,这篇的有几个组件需要某些js文件的支持. 本文原创地址:http://www.cnblog ...
- C#进阶系列——一步一步封装自己的HtmlHelper组件:BootstrapHelper
前言:之前学习过很多的Bootstrap组件,博主就在脑海里构思:是否可以封装一套自己Bootstrap组件库呢.再加上看到MVC的Razor语法里面直接通过后台方法输出前端控件的方式,于是打算仿照H ...
- ASP.Net WebForm温故知新学习笔记:二、ViewState与UpdatePanel探秘
开篇:经历了上一篇<aspx与服务器控件探秘>后,我们了解了aspx和服务器控件背后的故事.这篇我们开始走进WebForm状态保持的一大法宝—ViewState,对其刨根究底一下.然后,再 ...
- ASP.Net WebForm温故知新学习笔记:一、aspx与服务器控件探秘
开篇:毫无疑问,ASP.Net WebForm是微软推出的一个跨时代的Web开发模式,它将WinForm开发模式的快捷便利的优点移植到了Web开发上,我们只要学会三步:拖控件→设属性→绑事件,便可以行 ...
- ASP.Net WebForm学习笔记:一、aspx与服务器控件探秘
作者:周旭龙 出处:http://edisonchou.cnblogs.com 开篇:毫无疑问,ASP.Net WebForm是微软推出的一个跨时代的Web开发模式,它将WinForm开发模式的快捷便 ...
- MyBatis从入门到放弃六:延迟加载、一级缓存、二级缓存
前言 使用ORM框架我们更多的是使用其查询功能,那么查询海量数据则又离不开性能,那么这篇中我们就看下mybatis高级应用之延迟加载.一级缓存.二级缓存.使用时需要注意延迟加载必须使用resultMa ...
- JAVAEE——Mybatis第一天:入门、jdbc存在的问题、架构介绍、入门程序、Dao的开发方法、接口的动态代理方式、SqlMapConfig.xml文件说明
1. 学习计划 第一天: 1.Mybatis的介绍 2.Mybatis的入门 a) 使用jdbc操作数据库存在的问题 b) Mybatis的架构 c) Mybatis的入门程序 3.Dao的开发方法 ...
随机推荐
- 如何将自己开发的标签打成jar包
1: 在Myeclipse中新建一个java工程 2: 将你的标签处理器类统统都拷到工程里面, 将tld文件拷到META-INF里面 3:点击file里面的export,
- Java中枚举类型简单学习
/* * enum类型不允许继承 * 除了这一点,我们基本上可以将enum看作一个常规的类 * 我们可以添加自己的方法与属性,我们也可以覆盖其中的方法. * 不过一定要在enum实例序列的最后添加分号 ...
- jQuery细节总结
1.mouseover和mouseenter 区别 mouseenter指鼠标进入元素时触发,鼠标在元素子元素上不触发. mouseover指鼠标进入元素时触发,在元素进入子元素会触发. 在此引用一个 ...
- SAP供应商和客户的创建
进来遇到一个创建供应商的需求,由于在系统中关于供应商和客户的创建比较特殊,且没有相关函数进行创建, 找到一个类和方法来创建,类名:VMD_EI_API 方法名:MAINTAIN_DIRECT_INP ...
- EF中使用SQL语句或存储过程(小笔记)
1.无参数查询 var model = db.Database.SqlQuery<UserInfo>("select* from UserInfoes ").ToLis ...
- mysql复制的配置
# 78服务器 server-id=78 # 从哪个数开始 auto_increment_offset=1 # 每次增加多少 auto_increment_increment=2 log-bin=m ...
- 用JS打开网页时自动更改css样式,可用于处理浏览器兼容
代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- gO语言的安装和环境变量的配置
一.Go语言下载 go语言官方下载地址:https://golang.org/dl/ 找到适合你系统的版本下载,本人下载的是windows版本.也可以下载Source自己更深层次研究go语言. 二.G ...
- 笔试——JAVA相关
1. String 和 StringBuffer 的区别(转自http://pengcqu.iteye.com/blog/487538) Java笔试题经常考到“String和StringBuffer ...
- JavaScript的事件对象_概述/this
JavaScript 事件的一个重要方面是它们拥有一些相对一致的特点,可以给你的开发提供更多的强大功能. 最方便和强大的就是事件对象,他们可以帮你处理鼠标事件和键盘敲击方面的情况,此外还可以修改一般事 ...