日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

ASP.NET?MVC為用戶創建專屬文件夾_實用技巧

作者:Darren?Ji ? 更新時間: 2022-09-30 編程語言

假設需要為用戶創建專屬文件夾,文件夾名為用戶名,并且需要根據用戶類型在不同的文件夾下創建目標文件夾。

在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

欄目分類
最近更新