Создать модель для хранения результатов Path.Combine Array - PullRequest
0 голосов
/ 13 марта 2020

Моя среда разработки VS19, ASP. Net Core Razor (не MVC) 3.1 Страницы и Entity Framework Core.

У меня есть следующие класс / модель в моих моделях папка, которая имеет одно свойство:

````
public class FilesObject
{
    public string[] Files { get; set; } = new string[1000];
}

В обработчике OnGet () моего файла index.cs я написал следующий код для возврата массива, содержащего список файлов в указанном каталоге (wwwroot \ documents)

 public class IndexModel : PageModel
    {
        private readonly ApplicationDbContext _context;
        private readonly IWebHostEnvironment _hostingEnvironment;

        public IndexModel(ApplicationDbContext context, IWebHostEnvironment hostingEnvironment)
        {
            _context = context;
            _hostingEnvironment = hostingEnvironment;
        }

        [BindProperty]
        public FilesObject FilesObject { get; set; }

        public IActionResult OnGet() 
        {

            var webRootPath = _hostingEnvironment.WebRootPath;
            var docsPath = Path.Combine(webRootPath, "documents");
            FilesObject = Directory.GetFiles(docsPath);

            return Page();
        }
    }

Я получаю следующую ошибку: Ошибка CS0029 Невозможно неявно преобразовать строку типа в Models.FilesObject в этой строке:

FilesObject = Directory.GetFiles(docsPath);

Первоначально я пытался сделать что-то подобное this:

var DocumentInfo = Path.Combine (webRootPath, "documents");

Это работает хорошо, однако я не могу вернуть DocumentInfo на мою страницу index.cs html, чтобы сделать что-нибудь с этим, как ForEach l oop.

Я понимаю, что говорит мне ошибка, я просто не знаю, как ее исправить.

Любая помощь приветствуется. Заранее спасибо за ваше время.

Ответы [ 2 ]

0 голосов
/ 16 марта 2020

Ошибка CS0029 Невозможно неявно преобразовать строку типа в Models.FilesObject в этой строке:

Directory.GetFiles возвращает string[], поэтому необходимо изменить, как показано ниже:

FilesObject.Files = Directory.GetFiles(docsPath);

Перед его использованием вам необходимо инициализировать FilesObject. Вот рабочая демонстрация, как показано ниже:

1.Index.cs html:

@page
@model IndexModel
@{
    ViewData["Title"] = "Home page";
}

@foreach(var data in Model.FilesObject.Files)
{
    <div>
        @data;
    </div>

}

2.Index.cs html .cs:

public class IndexModel : PageModel
{
    private readonly IWebHostEnvironment _hostingEnvironment;

    public IndexModel( IWebHostEnvironment hostingEnvironment)
    {
        _hostingEnvironment = hostingEnvironment;
    }

    [BindProperty]
    public FilesObject FilesObject { get; set; }

    public IActionResult OnGet()
    {
        FilesObject = new FilesObject() { };//need to add this line to initialize the model
        var webRootPath = _hostingEnvironment.WebRootPath;
        var docsPath = Path.Combine(webRootPath, "documents");
        FilesObject.Files = Directory.GetFiles(docsPath);

        return Page();
    }
}

Результат: enter image description here

enter image description here

0 голосов
/ 14 марта 2020

Чтобы получить список файлов в каталоге, выполните:

DirectoryInfo d = new DirectoryInfo(@"path/that/you/are/interested/in");
FileInfo[] Files = d.GetFiles("*.txt"); // e.g. getting Text files

См. DirectoryInfo и FileInfo

...