- 浏览: 1022345 次
- 性别:
- 来自: 天津
文章分类
- 全部博客 (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 1398当服务的修改了js和css内容后,发布到II ... -
分布式系统调用链监控
2018-02-22 14:36 862分布式系统调用链监 ... -
使用C# 和Consul进行分布式系统协调
2017-05-11 10:41 1304随着大数据时代的到来,分布式是解决大数据问题的一个主要手段, ... -
权限控制
2016-06-16 11:09 794权限控制就是分为“用户登录身份验证”、“控制器方法权限控制” ... -
[ASP.NET MVC ]13 - Helper Method
2016-06-15 13:44 618我们平时编程写一些辅助类的时候习惯用“XxxHelper”来 ... -
[ASP.NET MVC]14 - Unobtrusive Ajax
2016-06-15 12:46 668Ajax (Asynchronous JavaScript ... -
[ASP.NET MVC ]08 - Area 使用
2016-06-15 12:28 782ASP.NET MVC允许使用 Area(区域)来组织Web ... -
将ASP.NET MVC中的form提交改为ajax提交
2016-06-01 15:51 2452在ASP.NET MVC视图中通过 @using (Htm ... -
@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别
2016-06-01 14:02 1040ASP.NET MVC 中@Html.Partial,@Ht ... -
Fiddler 模拟http form提交
2016-04-19 10:01 1663以下为代码部分 下面是fiddler调用此form ... -
MVC3 验证码
2011-11-07 14:30 1582MVC3开发,看附件 -
MVC 分页 JQuery Pager
2011-11-07 13:00 3204导入的包 <script type=" ... -
ASP.NET MVC - Creating a SelectListItem with the disabled="disabled" attribute
2011-10-24 15:07 1486要完成这样的效果 <option disabled=& ... -
希望大家告诉我一些关于.net MVC3 MVC2的书籍
2011-10-21 16:36 1489大家好,小弟进入微软时间不久,正在学习微软的MVC3,但是基本 ... -
Jquery与.net MVC结合,通过Ajax
2011-10-14 09:55 2640在工作中做了这么一个东西。 Html端: @using T ... -
Radio Button and CheckBox在FireFox中刷新自动改变选中项
2011-08-29 12:54 2786今天开发过程中出现了这样一个问题,我选中radio butto ... -
jQuery Supertextarea Plugin
2011-08-18 11:46 1282http://truthanduntruth.com/deve ... -
MVC ASP页面叫Control的各种方法
2011-07-11 15:43 1645<%@ Control Language="C ... -
ASP.NET MVC 学习: 视图
2011-07-07 16:24 1844用视图呈现UI 视图可以不包含任何应用逻辑或者数据库 ... -
MVC 各种传值方式
2011-07-07 15:41 5368【转自】:http://hi.baidu.com/honfei ...
相关推荐
**Asp.net MVC 框架详解** Asp.NET MVC(Model-View-Controller)是微软推出的一种基于ASP.NET的轻量级Web应用程序框架,它为开发者提供了更灵活的架构和更高的可测试性。该框架在传统的Web Forms之外提供了一种...
实现这种联动效果,可以使用jQuery等前端JavaScript技术来完成,也可以在视图中使用*** MVC的辅助方法。 在使用`ViewBag`或`ViewData`进行数据传递时,有时会遇到类型不匹配的问题,如CS1973错误,这是因为在使用...
* ASP.NET MVC DropDownList 数据绑定及使用详解 * ASP.NET MVC 中为 DropDownListFor 设置选中项的方法 * ASP.NET Ajax 级联 DropDownList 实现代码 * ASP.NET DropDownList 自定义控件,让你的分类更清楚 * ASP...
### ASP.NET MVC 中 @Html 用法详解 #### 一、引言 ASP.NET MVC 是一种流行的 Web 开发框架,它将 Model-View-Controller 架构模式应用于 Web 应用程序开发中,使得应用程序更加模块化且易于管理。在 ASP.NET MVC ...
**ASP.NET MVC 2 框架详解** ASP.NET MVC 2 是微软为构建可维护性和测试性极高的Web应用程序而推出的一个开源框架。它基于Model-View-Controller(MVC)设计模式,该模式强调将业务逻辑、数据处理和用户界面分离,...
**ASP.NET MVC 2 架构详解** ASP.NET MVC(Model-View-Controller)是一种用于构建可维护性和可测试性极高的Web应用程序的框架。在ASP.NET MVC 2中,我们看到了这一强大框架的进一步发展,它允许开发人员更加灵活地...
若要获取选项的索引值,也就是选择的value值,可以在.NET中使用`DropDownList1.SelectedValue.ToString()`。而在JavaScript中,则通过`document.getElementById("DropDownList1").selectedIndex`来获取。 如果要...
"ASP.NET MVC中HtmlHelper控件7个大类中各个控件使用详解" ASP.NET MVC框架中,HtmlHelper控件是非常重要的组件之一,它提供了一系列的扩展方法来生成HTML元素。HtmlHelper控件可以分为7个大类,每个类别都拥有其...
现在我们来看看在MVC中DropDownList是如果和接受从Controller传过来的值的。 第一种:使用DropDownList 控制器代码: public ActionResult Index() { //1.1查询YzSeriesEntity的数据 List<Model> seriesList ...
**ASP.NET MVC 开发实例详解** ASP.NET MVC(Model-View-Controller)是微软提供的一种用于构建可测试、模块化Web应用程序的框架。它结合了ASP.NET Web Forms的某些功能和基于请求的处理方式,以及一种更加清晰的...
在ASP.NET MVC框架中,`HtmlHelper`提供了一系列方便的方法来简化视图层的开发工作,它可以帮助开发者更轻松地生成HTML标记,减少硬编码,提升代码的可读性和可维护性。本文将详细介绍`HtmlHelper`中的常见用法及其...
1. ASP.NET框架详解: ASP.NET是一个开源的服务器端Web应用框架,用于构建功能丰富的Web应用程序。它包括多种Web项目类型,如Web Forms、MVC、Web API和Blazor。在本案例中,很可能使用的是Web Forms模式,该模式...
视图中使用 `@Html.DropDownList` 创建下拉列表: ```html @Html.DropDownList("enumList", new SelectList(ViewBag.enums), new { @class = "btn btn-success dropdown-toggle form-control" }) ``` 2. **绑定...
**ASP.NET MVC 程序实例详解** ASP.NET MVC 是微软提供的一种用于构建可测试、模块化和高性能 Web 应用程序的框架。它结合了 Model-View-Controller(MVC)设计模式,使得开发人员可以更清晰地分离业务逻辑、数据...
在ASP.NET MVC 1.0中,开发和调试流程主要包括编写控制器、模型和视图,设置路由规则,使用内置的开发服务器进行本地测试。开发过程中,可以利用Visual Studio的调试工具,如断点、变量监视等,对代码进行逐行检查。...
开发者可能使用了ASP.NET的控件,如TextBox、DropDownList等,结合后台的C#代码来处理这些操作。 3. **搜索与过滤**:为了方便查找特定联系人,系统需要提供搜索功能,可能通过SQL查询实现,根据姓名、电话等字段...
6. **状态管理**:在ASP.NET中,可以使用视图状态(ViewState)、控制状态(ControlState)和Session等机制来管理用户会话状态,确保用户在页面间导航时信息不丢失。比如,用户在查看新闻详情时的评分状态就可能需要...