DropDownList & DropDownListFor Default Value / Bind Value / 默认值 in MVC4
Posted on 2013-03-22 01:13 梁风有信 阅读(1272) 评论(0) 编辑 收藏 举报一时兴起想学MVC,于是,找点简单的事情来磨磨手,昨天有做了一点点练习,
今天继续,
显示数据都很简单,不求有多艺术的范,
直接用内置的自动创建的页面:
Create/Delete/Detail/Edit/Index就行,这你懂的。
有时候,看那些TextBox输入框就有点冲动想输东西,
但我是个好吃懒做的人,有些值,总不想打字,比如我们都很关注是用户表中的“性别”问题,
总不能让我在TextBox里面输入“男”或“女”吧,要是有人输了“人妖”怎么办,
其实人妖也是有他妈生的,还是选择比较好些,社会要和谐嘛.....
于是,搞个系统的数据配置信息表吧,把一些杂七杂八的信息全放里面,如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public class SystemCFG 2 { 3 [Key] 4 public int CFGID { get; set; } 5 public string GroupName { get; set; } 6 public string DetailType { get; set; } 7 public string Value { get; set; } 8 public string Description { get; set; } 9 public int Sequency { get; set; } 10 public bool IsDefault { get; set; } 11 12 public static IQueryable<SelectListItem> GetSEXList(string DefaultValue = "") 13 { 14 DBContext db = new DBContext(); 15 return (from a in db.SystemCFGs.Where(a => a.GroupName == "SYSCONFIG" && a.DetailType == "SEX") 16 select new SelectListItem 17 { 18 Text = a.Description, 19 Value = a.Value, 20 Selected = (a.Value == DefaultValue ? true : false) 21 }); 22 } 23 }
顺便写了个方法用来取“性别”的列表的,注意有个可选参数哦!这个是我故意的。
当然,基础数据是要搞两条的:
至于为什么呢,主要是为了默认值的问题。
我们继续往下看:
我们直接看EDIT的时候,
在Controller的EDIT方法里面当然要把这个“性别”的列表传到前端(也就是页面)去啦:
这里,我们看到是通过调用前面写的那个方法来得到一个列表,然后存到ViewData Object里面去,
非常提醒一下,我们要把当前这条数据的“性别”也要传进去,这样,我们就会得到一个带有“默认值”的SelectListItem了。
页面就简单了:
1 <div class="editor-label"> 2 @Html.LabelFor(model => model.Sex) 3 </div> 4 <div class="editor-field"> 5 @Html.DropDownList("SEX","--SELECT--") 6 @Html.ValidationMessageFor(model => model.Sex) 7 </div>
当然,我们绑到页面上的时候,也就把我们想要的那个“性别”给默认选中了........
到这测试都会很OK。
(备注一下):
由于前面走了一些蠢路,那个方法返回的类型搞成dynamic,然后,在页面再转换成SelectList,这样Post回去后,发现会出现异常,提示如下:
具有键“Sex”的 ViewData 项属于类型“System.string”,但它必须属于类型“IEnumerable<SelectListItem>”。
这个问题也好解决,在我们Post回去的EDIT方法里面重新获取一下“性别”的数据源并设置到ViewData里面就行了,如下:
1 [HttpPost] 2 public ActionResult Edit(User user) 3 { 4 ViewData["SEX"] = SystemCFG.GetSEXList(); 5 if (ModelState.IsValid) 6 { 7 8 db.Entry(user).State = EntityState.Modified; 9 db.SaveChanges(); 10 return RedirectToAction("Index"); 11 } 12 return View(user); 13 }
夜又深了,该洗洗涮涮睡了.....