梁风有信

梁风有信
  首页  :: 联系 :: 管理

一时兴起想学MVC,于是,找点简单的事情来磨磨手,昨天有做了一点点练习,

今天继续,

显示数据都很简单,不求有多艺术的范,

直接用内置的自动创建的页面:

Create/Delete/Detail/Edit/Index就行,这你懂的。

有时候,看那些TextBox输入框就有点冲动想输东西,

但我是个好吃懒做的人,有些值,总不想打字,比如我们都很关注是用户表中的“性别”问题,

总不能让我在TextBox里面输入“男”或“女”吧,要是有人输了“人妖”怎么办,

其实人妖也是有他妈生的,还是选择比较好些,社会要和谐嘛.....

于是,搞个系统的数据配置信息表吧,把一些杂七杂八的信息全放里面,如下:

SystemCFG
 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         }     

夜又深了,该洗洗涮涮睡了.....