假设需要为用户创建专属文件夹,文件夹名为用户名,并且需要根据用户类型在不同的文件夹下创建目标文件夹。
在F盘创建"Users"文件夹,在其中创建"Gold"文件夹,用来归类"金牌会员",创建"Silver",用来归类"银牌会员"。
关于用户的Model。
using System.ComponentModel.DataAnnotations; namespace MvcApplication1.Models { public class User { public int Id { get; set; } [Display(Name = "用户类型")] [Required(ErrorMessage = "必填")] public short UserType { get; set; } [Display(Name = "用户名")] [Required(ErrorMessage = "必填")] [StringLength(10, MinimumLength = 2, ErrorMessage = "长度2-10位")] public string UserName { get; set; } } }
创建关于用户类型的枚举。
using MvcApplication1.Extension; namespace MvcApplication1.Models { public enum UserTypeEnum { Gold = 0, Silver = 1 } }
用户类型最终会以下拉框的形式呈现在视图中。如果想在下拉框中显示中文该如何做?
--可以为枚举项打上自定义的Attribute,并提供一个属性,最终被读到视图中的下拉框,修改UserTypeEnum。
using MvcApplication1.Extension; namespace MvcApplication1.Models { public enum UserTypeEnum { [EnumDisplayName("金牌会员")] Gold = 0, [EnumDisplayName("银牌会员")] Silver = 1 } }
EnumDisplayNameAttribute
using System; namespace MvcApplication1.Extension { public class EnumDisplayNameAttribute : Attribute { private string _displayName; public EnumDisplayNameAttribute(string displayName) { _displayName = displayName; } public string DisplayName { get { return _displayName; } } } }
以上,提供构造函数以便把枚举项的中文名赋值给字段_displayName,提供属性DisplayName以便把枚举项的中文名最终被访问。
另外,视图中的Html.DropDownListFor()要求集合数据源是IEnumerable<SelectListItem>类型,所以,有必要写一个帮助方法,把枚举项的中文名读取出来并以IEnumerable<SelectListItem>类型返回。
using System; using System.Collections.Generic; using System.Reflection; using System.Web.Mvc; namespace MvcApplication1.Extension { public class EnumExt { /// <summary> /// 获取枚举成员的自定义Attribute的一个属性值 /// </summary> /// <param name="e">枚举成员</param> /// <returns></returns> public static string GetEnumDescription(object e) { //获取枚举成员的Type对象 Type t = e.GetType(); //获取Type对象的所有字段 FieldInfo[] ms = t.GetFields(); //遍历所有字段 foreach (FieldInfo f in ms) { if (f.Name != e.ToString()) { continue; } if (f.IsDefined(typeof(EnumDisplayNameAttribute), true)) { return (f.GetCustomAttributes(typeof(EnumDisplayNameAttribute), true)[0] as EnumDisplayNameAttribute).DisplayName; } } return e.ToString(); } public static List<SelectListItem> GetSelectList(Type enumType) { List<SelectListItem> selectList = new List<SelectListItem>(); //selectList.Add(new SelectListItem{Text = "--请选择--",Value = ""}); foreach (object e in Enum.GetValues(enumType)) { selectList.Add(new SelectListItem { Text = GetEnumDescription(e), Value = ((int)e).ToString() }); } return selectList; } } }
在HomeController中。
using System.IO; using System.Web.Mvc; using MvcApplication1.Extension; using MvcApplication1.Models; namespace MvcApplication1.Controllers { public class HomeController : Controller { public ActionResult AddUser() { ViewData["ut"] = EnumExt.GetSelectList(typeof (UserTypeEnum)); return View(); } //根文件夹 private const string main_Dir = @"F:/Users"; [HttpPost] public ActionResult AddUser(User user) { ViewData["ut"] = EnumExt.GetSelectList(typeof(UserTypeEnum)); if (ModelState.IsValid) { //创建用户文件夹 CreateDir(user.UserType, user.UserName); return Content("用户专属文件夹创建成功!"); } return View(user); } //根据文件名和用户类型创建文件夹 private static void CreateDir(short userType, string subdir) { //需要创建的文件夹的路径 string path = ""; switch (userType) { case (short)UserTypeEnum.Gold: path = main_Dir + "/" + "Gold/" + subdir; break; case (short)UserTypeEnum.Silver: path = main_Dir + "/" + "Silver/" + subdir; break; default: path = main_Dir + "/" + "Silver/" + subdir; break; } Directory.CreateDirectory(path); } } }
在Home/Index.cshtml中。
@model MvcApplication1.Models.User @{ ViewBag.Title = "AddUser"; Layout = "~/Views/Shared/_Layout.cshtml"; } <style type="text/css"> ul { list-style-type: none; } </style> <h2>AddUser</h2> @using (Html.BeginForm("AddUser", "Home", FormMethod.Post, new {id = "addForm"})) { <ul> <li> @Html.LabelFor(u => u.UserName) @Html.EditorFor(u => u.UserName) @Html.ValidationMessageFor(u => u.UserName) </li> <li> @Html.LabelFor(u => u.UserType) @Html.DropDownListFor(u => u.UserType, (List<SelectListItem>)ViewData["ut"],"==选择用户类型==") @Html.ValidationMessageFor(u => u.UserType) </li> </ul> <input type="submit" value="创建"/> }
运行:
点击"创建":
在F:\Users\Gold下多了一个"Darren"文件夹: