- 浏览: 1005395 次
- 性别:
- 来自: 天津
文章分类
- 全部博客 (445)
- Java (22)
- J2EE (18)
- Flex (102)
- Flex-blazeds (1)
- Flex-FABridge (2)
- Flex4 (3)
- CheckStyle (2)
- PowerDesigner (0)
- POI (2)
- Java2Word (2)
- 杂项 (15)
- 日记 (3)
- 数据库-oracle (41)
- 数据库-SQLServer (7)
- 中间件 (1)
- 英语 (8)
- C# (43)
- ASP.net (72)
- ASP.net MVC (28)
- 微软-Entity Framework (19)
- JavaScript (22)
- JQuery (31)
- EasyUI (3)
- VS2010 (4)
- CVS (1)
- Tomcat (3)
- Linux (1)
- 遗留问题 (1)
- iphone (1)
- MAC (0)
- 系统 (2)
- Web Service (4)
- Cache Manager (1)
- PMP (1)
- WCF (10)
- BootstrapJs (1)
- Web API (6)
- Go语言 (0)
- 网络协议 (2)
- Redis (10)
- RabbitMQ (10)
- Git (3)
- Kafka (5)
- ELK (5)
- Nginx (3)
- 测试 (2)
最新评论
-
ygm0720:
Table行拖拽自己实现 -
程乐平:
Flex4开发视频教程(27集)下载http://bbs.it ...
Flex4教程 -
liuweihug:
Jquery+asp.net 后台数据传到前台js进行解析的办 ...
AJAX $.toJSON的用法或把数组转换成json类型 -
weilikk:
谢谢谢谢!!
javascript IE下不能用 trim函数解决方法 -
gxz1989611:
vigiles 写道请问楼主:[Fault] exceptio ...
blazeds推送技术至Flex
本文我们将讲解DropDownList的使用,这在ASP.NET MVC中算是比较常见的控件。该方法对于使用HtmlHelper比较方便。
在ASP.NET MVC中,尽管我们可以直接在页面中编写HTML控件,并绑定控件的属性,但更方便的办法还是使用HtmlHelper中的辅助方法。在View中,包含一个类型为HtmlHelper的属性Html,它为我们呈现控件提供了捷径。
我们今天主要来讨论Html.DropDownList的用法,首先从Html.TextBox开始。
Html.TextBox有一个重载方法形式如下:
public static string TextBox(this HtmlHelper htmlHelper, string name, object value);其中name参数为文本框name属性(以及id属性)的值,value参数为文本框的默认值(即value属性的值)。如果value参 数为null或者使用没有value参数的重载方法,那么此时name参数同时还是一个键值,负责获取文本框的默认值。获取的顺序为,先从 ViewData中查找是否存在键值为name值的项,如果ViewData中没有则从ViewData.Model中查找是否存在名称为name值的属 性,如果仍然不存在,则返回null。(具体参见HtmlHelper的InputHelper辅助方法)
也就是说
public ActionResult Test() { ViewData["Name"] = "Jade"; return View(); } <%= Html.TextBox("Name")%>
这样的代码将会输出这样的HTML:
<input id="Name" name="Name" type="text" value="Jade" />
由于TextBox的id和name属性的值与ViewData中的某一项同名(均为Name),因此TextBox的value属性的值将自动绑定为 ViewData中Name项的值。不仅是ViewData,如果view model的类型包含Name属性,也将输出同样的结果:
var user = new User { Name = "Jade" }; ViewData.Model = user; return View();
如果ViewData和ViewData.Model中同时存在Name,则优先使用ViewData中的项。
CheckBox、Hidden、Password、RedioButton等控件也是如此,它们与TextBox一样都使用input标记,属性绑定的规则大致相同。
DropDownList则与TextBox等控件不同,它使用的是select标记。它需要两个值:在下拉框中显示的列表,和默认选项。而自动绑定一次只能绑定一个属性,因此你需要根据需要选择是绑定列表,还是默认选项。
DropDownList扩展方法的各个重载版本“基本上”都会传递到这个方法上:
public static string DropDownList(this HtmlHelper htmlHelper, string name, IEnumerable<SelectListItem> selectList, string optionLabel, IDictionary<string, object> htmlAttributes) { … }
如果没有指定selectList,该方法将自动绑定列表,即从ViewData中查找name所对应的值。如果提供了selectList,将自 动绑定默认选项,即从selectList中找到Selected属性为true的SelectedListItem。(具体参见HtmlHelper方 法的SelectInternal辅助方法)
例1:如果在Action方法中有如下代码:
List<SelectListItem> items = new List<SelectListItem>(); items.Add(new SelectListItem { Text = "Kirin", Value = "29" }); items.Add(new SelectListItem { Text = "Jade", Value = "28", Selected = true}); items.Add(new SelectListItem { Text = "Yao", Value = "24"}); this.ViewData["list"] = items;
在View中这样使用:
<%=Html.DropDownList("list")%>那么辅助方法将率先从ViewData中获取key为list的项,如 果该项为IEnumerable<SelectedListItem>类型则绑定到下拉框中,否则将抛出 InvalidOperationException。由于第二个SelectListItem的Selected为true,则默认选中第二个。
例2:如果Action中代码如下:
List<SelectListItem> items = new List<SelectListItem>(); items.Add(new SelectListItem { Text = "Kirin", Value = "29" }); items.Add(new SelectListItem { Text = "Jade", Value = "28"}); items.Add(new SelectListItem { Text = "Yao", Value = "24"}); this.ViewData["list"] = items; this.ViewData["selected"] = 24;
View中的代码如下:
<%=Html.DropDownList("selected", ViewData["list"] as IEnumerable<SelectListItem>)%>
那么辅助方法将ViewData["list"]绑定为下拉框,然后从ViewData中获取key为selected的项,并将下list中Value值与该项的值相等的SelecteListItem设为默认选中项。
以上两种方法尽管可以实现DropDownList的正确显示,但并非最佳实践。在实际项目中,我们更希望在代码中使用强类型。例如上面两例 中,SelectListItem的Text和Value本来是User对象的Name和Age属性,然而上面的代码却丝毫体现不出这种对应关系。如果 User列表是从数据库或其他外部资源中获得的,我们难道要用这样的方式来绑定吗?
var users = GetUsers(); foreach (var user in users) { items.Add(new SelectListItem { Text = user.Name, Value = user.Age.ToString() }); }
这显然是我们所无法容忍的。那么什么是最佳实践呢?
ASP.NET MVC为DropDownList和ListBox(都在html中使用select标记)准备了一个辅助类型:SelectList。 SelectList继承自MultiSelectList,而后者实现了IEnumerable<SelectListItem>。也就是 说,SelectList可以直接作为Html.DropDownList方法的第二个参数。
MultiSelectList包含四个属性,分别为:
Items:用于在select标记中出现的列表,通常使用option标记表示。IEnumerable类型。
DataTextField:作为option的text项,string类型。
DataValueField:作为option的value项,string类型。
SelectedValues:选中项的value值,IEnumerable类型。
显然,作为DropDownList来说,选中项不可能为IEnumerable,因此SelectList提供了一个新的属性:
SelectedValue:选中项的value值,object类型。
同时,SelectList的构造函数如下所示:
public SelectList(IEnumerable items, string dataValueField, string dataTextField, object selectedValue) : base(items, dataValueField, dataTextField, ToEnumerable(selectedValue)) { SelectedValue = selectedValue; }
于是我们的代码变为:
var users = GetUsers(); var selectList = new SelectList(users, "Age", "Name", "24"); this.ViewData["list"] = selectList; <%=Html.DropDownList("list")%>
当然,你也可以使用不带selectedValue参数的构造函数重载,而在view中显式指定 IEnumerable<SelectListItem>,并在ViewData或view model中指定其他与DropDownList同名的项作为默认选项。
最后让我们来回顾一下DropDownList的三种用法:
建立IEnumerable<SelectListItem>并在其中指定默认选中项。
建立IEnumerable<SelectListItem>,在单独的ViewData项或view model的属性中指定默认选中项。
使用SelectList。
好了,关于DropDownList的用法我们今天就讨论到这里,您会用了吗?
发表评论
-
asp.net mvc处理css和js版本问题
2018-05-24 16:40 1330当服务的修改了js和css内容后,发布到II ... -
分布式系统调用链监控
2018-02-22 14:36 827分布式系统调用链监 ... -
使用C# 和Consul进行分布式系统协调
2017-05-11 10:41 1247随着大数据时代的到来,分布式是解决大数据问题的一个主要手段, ... -
权限控制
2016-06-16 11:09 761权限控制就是分为“用户登录身份验证”、“控制器方法权限控制” ... -
[ASP.NET MVC ]13 - Helper Method
2016-06-15 13:44 572我们平时编程写一些辅助类的时候习惯用“XxxHelper”来 ... -
[ASP.NET MVC]14 - Unobtrusive Ajax
2016-06-15 12:46 631Ajax (Asynchronous JavaScript ... -
[ASP.NET MVC ]08 - Area 使用
2016-06-15 12:28 731ASP.NET MVC允许使用 Area(区域)来组织Web ... -
将ASP.NET MVC中的form提交改为ajax提交
2016-06-01 15:51 2408在ASP.NET MVC视图中通过 @using (Htm ... -
@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别
2016-06-01 14:02 997ASP.NET MVC 中@Html.Partial,@Ht ... -
Fiddler 模拟http form提交
2016-04-19 10:01 1607以下为代码部分 下面是fiddler调用此form ... -
MVC3 验证码
2011-11-07 14:30 1552MVC3开发,看附件 -
MVC 分页 JQuery Pager
2011-11-07 13:00 3153导入的包 <script type=" ... -
ASP.NET MVC - Creating a SelectListItem with the disabled="disabled" attribute
2011-10-24 15:07 1451要完成这样的效果 <option disabled=& ... -
希望大家告诉我一些关于.net MVC3 MVC2的书籍
2011-10-21 16:36 1449大家好,小弟进入微软时间不久,正在学习微软的MVC3,但是基本 ... -
Jquery与.net MVC结合,通过Ajax
2011-10-14 09:55 2604在工作中做了这么一个东西。 Html端: @using T ... -
Radio Button and CheckBox在FireFox中刷新自动改变选中项
2011-08-29 12:54 2751今天开发过程中出现了这样一个问题,我选中radio butto ... -
jQuery Supertextarea Plugin
2011-08-18 11:46 1242http://truthanduntruth.com/deve ... -
MVC ASP页面叫Control的各种方法
2011-07-11 15:43 1605<%@ Control Language="C ... -
ASP.NET MVC 学习: 视图
2011-07-07 16:24 1807用视图呈现UI 视图可以不包含任何应用逻辑或者数据库 ... -
MVC 各种传值方式
2011-07-07 15:41 5325【转自】:http://hi.baidu.com/honfei ...
相关推荐
.net MVC下,AJAX实现DropDownList数据绑定,并实现无刷新城市联动。 内含SQL Server 数据库执行语句,只要运行一下就OK了。 运行代码时注意别忘了更改成所使用数据库的ServerName,LoginName,Password。
MVC3 ASP.NET AJAX DropDownList 级联
ASP.NET中dropdownlist和GridView控件的用法,简单易学,一看就懂.
asp.net Dropdownlist结合CheckBoxList多选下拉框
本文实例讲述了ASP.NET MVC4中使用Html.DropDownListFor的方法。分享给大家供大家参考,具体如下: 一、控制器部分: public ActionResult PageDetail() { var thisList = _sysDepartmentBll.GetAllDepartmentList...
asp.net中dropdownlist使用AJAX联动
(asp.net c#)DropDownList绑定后显示对应的项的两种方法.docx
ASP.NET MVC DropDownList Samples ASP.NET MVC DropDownList 范例 介绍ASP.NET MVC 内建的Html Helper - DropDownList。 包含之前部落格文章里曾经介绍过的一些有关DropdownList 的内容, 不过如果已经有在GitHub ...
详细描述了对C# MVC 中 DropdownList下拉列表的总结
ASP.NET Multiple Selection DropDownList with AJAX HoverMenuExtender
此代码包含DropDownList 可输入源码及调用demol,处理了好久终于搞定。希望跟大家分享
开发中会遇到的例子,使用dropdownlist绑定后台数据库,本例使用的是oracle可修改为其他数据库,适合新手学习。
可设置DataValueField,DataTextField,绝对值得下载的资源,使用简单,个人作品。
asp.net Ajax DropDownList,asp.net下拉列表,自定义DropDownList 1.开发背景: A.Html Select标签不支持输入值 B.风装Ajax js 实现查询,检索数据库信息 C.用户体验. D.支持多选 E.将js和asp.net Web窗体独立开...
asp.net 可输入的dropdownlist
DropdownList的应用,是比较好的教程
DropDownList 控件用于创建下拉列表。DropDownList 控件中的每个可选项都是由 ListItem 元素定义的!该控件支持数据绑定
本人这个是很简单的asp.net技术来实现asp.net中dropdownlist联动问题,看完这个你可以实现无线分下,采用asp.net加access数据库查询语句....
asp.net(C#),DataList控件里嵌入CheckBox,实现全选、反选以及删除功能。
关于ASP.NET MVC模式 MVCDEMO项目 1.1 初识MVC--TestController.cs 1.2 简单的增删改查--PersonController.cs 1.3 关于layout--LayoutTestController.cs 2020年4月20日 23:08:40 Update:添加其他的一些Demo 02...