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="创建"/>
}
运行:

点击"创建":

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

MVC为用户创建专属文件夹的更多相关文章
- MVC文件上传09-使用客户端jQuery-File-Upload插件和服务端Backload组件让每个用户有专属文件夹,并在其中创建分类子文件夹
为用户创建专属上传文件夹后,如果想在其中再创建分类子文件夹,该怎么做?可以在提交文件的视图中再添加一个隐藏域,并设置 name="uploadContext". 相关兄弟篇: MV ...
- MVC文件上传08-使用客户端jQuery-File-Upload插件和服务端Backload组件让每个用户有专属文件夹
当需要为每个用户建立一个专属上传文件夹的时候,可以在提交文件的视图中添加一个隐藏域,并设置name="objectContext". 相关兄弟篇: MVC文件上传01-使用jque ...
- 使用IntelliJ IDEA创建Maven聚合工程、创建resources文件夹、ssm框架整合、项目运行一体化
一.创建一个空的项目作为存放整个项目的路径 1.选择 File——>new——>Project ——>Empty Project 2.WorkspaceforTest为项目存放文件夹 ...
- 【转载】使用IntelliJ IDEA创建Maven聚合工程、创建resources文件夹、ssm框架整合、项目运行一体化
一.创建一个空的项目作为存放整个项目的路径 1.选择 File——>new——>Project ——>Empty Project 2.WorkspaceforTest为项目存放文件夹 ...
- MFC 如何创建浏览文件夹的对话框
如何创建浏览文件夹的对话框 如何创建浏览文件夹的对话框 CString CXXXXDlg::GetOpenfolderPath() { BROWSEINFO bi; ZeroMemory(&b ...
- 命令行创建畸形文件夹+畸形目录管理工具(DeformityPath)
命令行创建畸形文件夹: 第一步:在运行中输入cmd,回车,打开命令行窗口 第二步:在命令行窗口中切换到想要建立文件夹的硬盘分区,如D盘(输入d:) 第三步:输入 MD 123..\ 回车,注意文件夹名 ...
- eclipse创建一个文件夹
如何给eclipse创建一个文件夹,便于项目的管理:有时我们的eclipse中会有很多项目的,有的是公司的如Project1,Project2,Project3....还有的呢, 也可能是自己平时做的 ...
- Python 创建递归文件夹
# 创建递归文件夹 def createfiles(filepathname): try: os.makedirs(filepathname) except Exception as err: pri ...
- MVC的App_Code这个特殊文件夹
对于一个之前编译一点都没有问题的项目,突然间调试就出现了一个报错: 然而你会天真的认为,这个真的是using的问题吗!别傻了,我检查了一遍又一遍: 首先这个是有using的! 其实代码编写上也是没有报 ...
随机推荐
- Postman接口&压力测试
Postman接口与压力测试实例 Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件.它提供功能强大的 Web API & HTTP 请求调试. 1.环境变量和全局 ...
- SQL SERVER2008 镜像全攻略
--在非域控环境中创建数据库镜像, 我们必须使用证书来创建数据库镜像. 大致的步骤包括: --在为数据库镜像配置的每个服务器实例上执行下列步骤: --在 master 数据库中,创建数据库主密钥. - ...
- 常用SQL Server 语句
常用SQL语句大全 1.//创建数据库 CREATE DATABASE DBName 2.//删除数据库 DROP DATABASE DBName 3.//备份SQL SERVER --- 创建 ...
- Jenkins+Docker持续集成
本节内容: Jenkins介绍 安装部署Jenkins Jenkins构建maven风格的job Jenkins邮件通知设置 Sonar Jenkins与Docker结合 一.Jenkins介绍 Je ...
- spring boot在控制台输出彩色日志
阅读org.springframework.boot.context.config.AnsiOutputApplicationListener 源码发现,通过向JVM传递参数,可以在控制台打印彩色日志 ...
- atomikos + druid 连接超时失效
atomikos + druid 连接超时失效,需要多次连接才能成功. 首次连接会报异常: 2018-01-08 16:58:12 DEBUG [com.jpcar.model.dao.jpcar.A ...
- tp5总结(二)
1.简化路由[一方面可以更好的让搜索引擎抓取:另一方面简化路由,利于记忆] 1-1.在[public/]下面创建admin.php 复制index.php 然后绑定前后台模块define('BIND_ ...
- Adobe Audition CC 2017 (10.0)安装教程
Adobe Audition CC 2017 (10.0)安装教程 注:下载地址在文章末尾 第一步:首先请将电脑的网络断开,很简单:禁用本地连接或者拔掉网线,这样就可以免除登录Creative Clo ...
- python functools.wraps
我们在使用装饰器的时候,有些函数的功能会丢失,比如func.__name__,func.__doc__,func.__module__ 比如下面这个例子: In [16]: def logged(fu ...
- Ubuntu下修改为永久DNS的方法
安装好Ubuntu之后设置了静态IP地址,再重启后就无法解析域名.想重新设置一下DNS,打开/etc/resolv.conf cat /etc/resolv.conf # Dynamic resolv ...