MVC为用户创建专属文件夹

假设需要为用户创建专属文件夹,文件夹名为用户名,并且需要根据用户类型在不同的文件夹下创建目标文件夹。

 

在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="创建"/>

}

 

运行:

1


点击"创建":

2


在F:\Users\Gold下多了一个"Darren"文件夹:

3

你可能感兴趣的:(mvc)