網站首頁 編程語言 正文
假設需要為用戶創建專屬文件夾,文件夾名為用戶名,并且需要根據用戶類型在不同的文件夾下創建目標文件夾。
在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"文件夾:
原文鏈接:https://www.cnblogs.com/darrenji/p/3843214.html
相關推薦
- 2022-10-02 React函數組件和類組件的區別及說明_React
- 2021-12-12 C/C++?Qt?MdiArea?多窗體組件應用教程_C 語言
- 2022-10-11 Android之InstanceState詳解
- 2022-11-30 Docker系列compose?ymal文件解析學習_docker
- 2022-11-09 WPF使用WrapPanel實現虛擬化效果_C#教程
- 2022-02-05 ERROR 1205 (HY000): Lock wait timeout exceeded; tr
- 2022-04-01 Kubernetes中Nginx配置熱加載的全過程_nginx
- 2022-04-19 盤點分析C語言中少見卻強大的字符串函數_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支