源码 | 书库 | 模板 | 特效 | 广告 | 素材 | 工具 | 必备 | ALEXA | 字体
会员投稿 投稿指南 RSS订阅
您当前的位置是:主页>网络编程>.Net编程>

详解Asp.net MVC DropDownLists

www.jz123.cn  2010-01-13   来源:   cnblogs    责任编辑(袁袁)    我要投递新闻

  Asp.net MVC中的DropDownLists貌似会让一开始从Asp.net Forms转过来的程序员造成不少迷惑.这篇文章讲述了为了使用DropDownLists,你需要在Asp.Net MVC中知道的方方面面.

  DropDownList,ComboBox,无论你喜欢怎么称呼这些,他们毫无例外的会被生成为html select标签.在<select>开标签和</select>闭标签之间,每一个列表元素都必须被包裹于<option>标签.当然你也可以使用<optgroup>标签将各个选项按逻辑上分成不同的组。如果针对<option>设置了value属性,则Value属性就是在form提交时select元素的值.而如果忘了给value属性赋值,则在<option></option>标签内包裹的内容则是被提交的值。

  为了简便起见,这里我先用一个静态的列表作为例子,你可以将这些作为html直接加入到你的View中:

  <select name="year">

  <option>2010</option>

  <option>2011</option>

  <option>2012</option>

  <option>2013</option>

  <option>2014</option>

  <option>2015</option>

  </select>

  或者,给列表加点小动态,假如需要列表的年份会随着新年到来之际自动往后推1年:

  <select name="year">

  <option><%= DateTime.Now.Year %></option>

  <option><%= DateTime.Now.AddYears(1).Year %></option>

  <option><%= DateTime.Now.AddYears(2).Year %></option>

  <option><%= DateTime.Now.AddYears(3).Year %></option>

  <option><%= DateTime.Now.AddYears(4).Year %></option>

  <option><%= DateTime.Now.AddYears(5).Year %></option>

  </select>

  甚至可以更简便:

  <select name="year">

  <% for (var i = 0; i < 6; i++){%>

  <option><%= DateTime.Now.AddYears(i).Year %></option>

  <%}%>

  </select>

  上面三个代码段生成效果相同,如下:

  

 

  如果的数据是来自数据库,那最好还是使用Html.DropDownList()扩展方法的八个重载方法来创建DropDownList.在这里我并不会一一说明这些不同的重载,但是会说明主要重载。第一种重载-public static string DropDownList(this HtmlHelper htmlHelper, string name) -仅仅接受一个string类型的参数.帮助文档中只是简单说明了这个string参数是<select>的name属性是远远不够的,这个参数不仅是<select>元素的name和id的值,还用于在ViewData查找元素,如果这个string参数和ViewData的key相匹配,ViewData元素会和helper进行绑定来创建<option>,同时,ViewData元素的类型必须是SelectListItems的集合.下面代码是使用LINQ TO SQL来从Northwind数据库中提取种类,使用DropDownList扩展方法的第一个重载:

  public ActionResult Index()

  {

  var db = new NorthwindDataContext();

  IEnumerable<SelectListItem> items = db.Categories

  .Select(c => new SelectListItem

  {

  Value = c.CategoryID.ToString(),

  Text = c.CategoryName

  });

  ViewData["CategoryID"] = items;

  return View();

  }

  注意每一个SelectListItem对象都必须给Value和Text属性进行赋值。他们会在运行时分别匹配到html的<option>的value属性和<option></option>之间的内容。注意这里ViewData的key用“CategoryID”显得有点奇怪,但实际上CategoryID正式<select>向服务器提交的值,所以使用这样的命名是有实际意义的。在View中,使用重载方法:

  <%= Html.DropDownList("CategoryID") %>

  而对应生成的HTML如下:

  <select id="CategoryID" name="CategoryID">

  <option value="1">Beverages</option>

  <option value="2">Condiments</option>

  <option value="3">Confections</option>

  <option value="4">Dairy Products</option>

  <option value="5">Grains/Cereals</option>

  <option value="6">Meat/Poultry</option>

  <option value="7">Produce</option>

  <option value="8">Seafood</option>

  </select>

  Html.DropDownList的第二种重载方法-public static string DropDownList(this HtmlHelper htmlHelper, string name, IEnumerable<SelectListItem> selectList)-是经常被使用的。在这个重载中,你可以使用IEnumerable<SelectListItem>或者SelectList对象作为参数。首先再看返回上述两个对象的方法之前,先看在View中的代码:

  <%= Html.DropDownList("CategoryID", (IEnumerable<SelectListItem>) ViewData["Categories"]) %>

  我们先说存入ViewData的第一种对象类型-IEnumerable<SelectListItem>对象,代码和前面的例子很像:

  public ActionResult Index()

  {

  var db = new NorthwindDataContext();

  IEnumerable<SelectListItem> items = db.Categories

  .Select(c => new SelectListItem

  {

  Value = c.CategoryID.ToString(),

  Text = c.CategoryName

  });

  ViewData["Categories"] = items;

  return View();

  }

  再看在ViewData中存入SelectList类型的代码:

  public ActionResult Index()

  {

  var db = new NorthwindDataContext();

  var query = db.Categories.Select(c => new { c.CategoryID, c.CategoryName });

  ViewData["Categories"] = new SelectList(query.AsEnumerable(), "CategoryID", "CategoryName");

  return View();

  }

  

上一篇:ASP.NET 4中的SEO改进 下一篇:提高ASP.NET应用程序性能的几招方法

评论总数:0 [ 查看全部 ] 网友评论


关于我们隐私版权广告服务友情链接联系我们网站地图