在ASP.NET Core MVC中获取wwwroot下Images文件夹的子文件夹
获取wwwroot/Images下的子文件夹并传递到视图
你需要把Directory.GetFiles替换为Directory.GetDirectories来获取子文件夹,同时注意不要在控制器构造函数里处理ViewBag(构造函数中无法访问ViewBag),应该在具体的Action方法中完成逻辑。
修正后的代码示例:
private readonly IWebHostEnvironment _hostingEnvironment; private string _mainDirectory; public TestController(IWebHostEnvironment hostingEnvironment) { _hostingEnvironment = hostingEnvironment; // 用WebRootPath直接拼接主目录路径,更简洁 _mainDirectory = Path.Combine(_hostingEnvironment.WebRootPath, "images"); } public IActionResult Index() { // 获取Images目录下的所有子文件夹路径 string[] subDirectories = Directory.GetDirectories(_mainDirectory); // 提取子文件夹的名称(而非完整物理路径) var folderNames = subDirectories.Select(dir => Path.GetFileName(dir)).ToArray(); // 将文件夹名存入ViewBag,供视图使用 ViewBag.ImageFolders = folderNames; return View(); }
关键说明
- 替换
Directory.GetFiles为Directory.GetDirectories:这个方法专门用于获取指定目录下的子文件夹路径 - 提取文件夹名称:用
Path.GetFileName(dir)只拿最后一级文件夹名,避免把服务器物理路径暴露到视图 - 逻辑放在Action中:ViewBag是Action上下文的一部分,控制器构造函数无法访问它,必须在具体的Action方法(比如
Index)中赋值
视图中使用示例(以Index.cshtml为例)
<div> <h3>Images下的子文件夹:</h3> <ul> @foreach (var folder in ViewBag.ImageFolders as string[]) { <li>@folder</li> } </ul> </div>
内容的提问来源于stack exchange,提问作者user17847724
相关产品推荐
相关产品推荐

