假设需要为用户创建专属文件夹,文件夹名为用户名,并且需要根据用户类型在不同的文件夹下创建目标文件夹。
在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"文件夹:
到此这篇关于ASP.NET MVC为用户创建专属文件夹的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持软件开发网。