zoukankan      html  css  js  c++  java
  • 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:UsersGold下多了一个"Darren"文件夹:

    3

  • 相关阅读:
    Android四大图片缓存(Imageloader,Picasso,Glide,Fresco)原理、特性对比
    Android系统更改状态栏字体颜色
    Zookeeper使用--命令行
    Zookeeper配置文件
    Zookeeper到底是干嘛的
    shell脚本学习之参数传递
    zabbix3.4.7之Zabbix_Trigger_Function详解
    zabbix3.4.7主动模式监控日志(多关键字)
    linux下grep命令详解
    一些不好理解的名词解释
  • 原文地址:https://www.cnblogs.com/darrenji/p/3843214.html
Copyright © 2011-2022 走看看