首页 > 解决方案 > ASP.NET CORE 5 MVC 如何将导航栏链接到视图?

问题描述

我创建了一个项目,我可以在其中上传、下载、删除和预览文件。现在,我想为类别创建一个导航栏,以便上传者只能将文件上传到特定类别,因此当用户进入网站并想要访问该文档时,他必须点击导航栏中的特定类别,然后单击类别后才会显示文档。我怎样才能做到这一点?我将在下面留下我的剃须刀页面和控制器代码,非常感谢您!:

 public class HomeController : Controller
    {
        FileClass fc = new FileClass();
        List<Admin> adminModels = new List<Admin>();
        interface Iuser
        {
            public string username { get; set; }
            public string password { get; set; }
            void IsEqualTo();
        }
        class User : Iuser
        {
            public string username { get; set; }
            public string password { get; set; }



            public void IsEqualTo()
            {
                throw new NotImplementedException();
            }
        }
        class Admin : Iuser
        {
            public string username { get; set; }
            public string password { get; set; }
            public void IsEqualTo()
            {
                throw new NotImplementedException();
            }
        }

        private readonly IWebHostEnvironment _iweb;

        public HomeController(IWebHostEnvironment iweb)
        {
            _iweb = iweb;

        }
        [HttpPost]
        public async Task<IActionResult> Index(IFormFile fifile)
        {
            string ext = Path.GetExtension(fifile.FileName);

            var fisave = Path.Combine(_iweb.WebRootPath, "Uploads", fifile.FileName);
            var stream = new FileStream(fisave, FileMode.Create);
            await fifile.CopyToAsync(stream);
            stream.Close();

            return RedirectToAction("Index");
        }
        public IActionResult Index()
        {

            var displayfc = Path.Combine(_iweb.WebRootPath, "Uploads");
            DirectoryInfo di = new DirectoryInfo(displayfc);
            List<FileInfo> fileinfo = di.GetFiles().ToList(); ;
            FileClass.Filename = fileinfo;
            return View();
        }
       


        public IActionResult Delete(string filedel)
        {
            filedel = Path.Combine(_iweb.WebRootPath, "Uploads", filedel);
            FileInfo fi = new FileInfo(filedel);
            if (fi != null)
            {
                System.IO.File.Delete(filedel);
                fi.Delete();
            }
            return RedirectToAction("Index");
        }
        public IActionResult DocumentViewer(string fileview)
        {

            return View(fc);
        }
        public async Task<IActionResult> Download(string filename)
        {
            if (filename == null)
                return Content("filename is not avaiable");
            var path = Path.Combine(_iweb.WebRootPath, "Uploads", filename);

            var memory = new MemoryStream();
            using (var stream = new FileStream(path, FileMode.Open))
            {
                await stream.CopyToAsync(memory);
            }
            memory.Position = 0;
            return File(memory, GetContentType(path), Path.GetFileName(path));
        }
        private string GetContentType(string path)
        {
            var types = GetMimeTypes();
            var ext = Path.GetExtension(path).ToLowerInvariant();
            return types[ext];
        }

        private Dictionary<string, string> GetMimeTypes()
        {
            return new Dictionary<string, string>
            {
                {".txt", "text/plain"},
                {".pdf", "application/pdf"},
                {".doc", "application/vnd.ms-word"},
                {".docx", "application/vnd.ms-word"},
                {".xls", "application/vnd.ms-excel"},
                {".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},
                {".png", "image/png"},
                {".jpg", "image/jpeg"},
                {".jpeg", "image/jpeg"},
                {".gif", "image/gif"},
                {".csv", "text/csv"}
            };
        }

        [HttpGet("denied")]
        public IActionResult Denied()
        {
            return View();
        }
        [Authorize(Roles = "Admin")]
        public IActionResult Secured()
        {
            return View();
        }
        [HttpGet("login")]
        public IActionResult Login(string returnUrl)
        {
            ViewData["ReturnURL"] = returnUrl;
            return View();
        }
        [HttpPost("login")]
        public async Task<IActionResult> Validate(string username, string password, string returnUrl)
        {

            ViewData["ReturnUrl"] = returnUrl;
            List<Iuser> utilizatori = new List<Iuser>();
            utilizatori.Add(new User() { username = "username", password = "password" });
            utilizatori.Add(new Admin() { username = "bobitza", password = "28" });
            utilizatori.Add(new Admin() { username = "rares", password = "cretin" });

            foreach (Iuser user in utilizatori)
            {
                if (user.username == username && user.password == password)
                {
                    if (user is User)
                    {
                        var claims = new List<Claim>();
                        claims.Add(new Claim("username", username));
                        claims.Add(new Claim(ClaimTypes.Role, "User"));
                        var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
                        var claimsPrincipal = new ClaimsPrincipal(claimsIdentity);
                        await HttpContext.SignInAsync(claimsPrincipal);
                    }
                    else if (user is Admin)
                    {
                        var claims = new List<Claim>();
                        claims.Add(new Claim("username", username));
                        claims.Add(new Claim(ClaimTypes.Role, "Admin"));
                        var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
                        var claimsPrincipal = new ClaimsPrincipal(claimsIdentity);
                        await HttpContext.SignInAsync(claimsPrincipal);
                    }

                }
            }





            TempData["Error"] = "Error. Username or Password is invlaid";
            return View("login");
        }
        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
        public IActionResult Error()
        {
            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }
        public async Task<IActionResult> Logout()
        {
            await HttpContext.SignOutAsync();
            return Redirect("/");
        }
    }

这是剃须刀页面

<center>
    <h1>Daca nici acu nu merge ... ma sinucid</h1>
    <h2>Sa moara mama</h2>
    <hr />
    @if (User.IsInRole("Admin"))
    {
<form methord="post" enctype="multipart/form-data" asp-controller="Home" asp-action="Index">
    <input type="file" name="fifile" />
    <nav class="navbar navbar-expand-lg navbar-light bg-light">
        <a class="navbar-brand" href="#">Meniu de navigare</a>
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
        </button>

        <div class="collapse navbar-collapse" id="navbarSupportedContent">
            <ul class="navbar-nav mr-auto">
                <li class="nav-item active">
                    <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#">Link</a>
                </li>
                <li class="nav-item dropdown">
                    <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                        Dropdown
                    </a>
                    <div class="dropdown-menu" aria-labelledby="navbarDropdown">
                        <a class="dropdown-item" href="#">Action</a>
                        <a class="dropdown-item" href="#">Another action</a>
                        <div class="dropdown-divider"></div>
                        <a class="dropdown-item" href="#">Something else here</a>
                    </div>
                </li>
                <li class="nav-item">
                    <a class="nav-link disabled" href="#">Disabled</a>
                </li>
            </ul>
            <form class="form-inline my-2 my-lg-0">
                <input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search">
                <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
            </form>
        </div>
    </nav>
    <input type="submit" value="Upload" />

    <hr />
</form>}
    <table class="table">
        <tr>
            <th>File Name</th>

        </tr>
        @foreach (var item in FileClass.Filename)
        {
            <tr>
                <td>@item.Name</td>
                <td><a href="@Url.Action("Download","Home",new { filename=item.Name })">Download</a></td>
                @if (User.IsInRole("Admin"))
                {
                    <td><a href="@Url.Action("Delete", "Home", new { filedel = item.Name })">Delete</a></td>
                }
                <td><a href="/Home/DocumentViewer/@item.Name">Viewer</a></td>

            </tr>
        }
    </table>
</center>

这是文件模型


public class FileClass
    {
        public static List<FileInfo> Filename { get; set; } = new List<FileInfo>();
    }

标签: c#asp.net-mvclinkercategoriesuploading

解决方案


推荐阅读