Как разрешить пользователю загружать изображение и делать его видимым в таблице бритв? - PullRequest
0 голосов
/ 07 мая 2019

Итак, в прошлом месяце я изучал ASP.NET Core MVC и пытался создать свой первый веб-сайт.Мне удалось сделать код загрузки и раскрытия в новом контроллере, но сейчас я пытаюсь сделать так, чтобы пользователь мог загрузить изображение в БД для фильма (или отправить в моем случае) и сделать его видимым вПодробная страница таблицы.Я видел много кода, но в моем случае он не работал, скорее всего потому, что я делаю что-то не так (у меня нет предыдущего опыта программирования, кроме того, что я хорошо разбираюсь в школе и знаю основы, такие как ifs, whilesи т. д.) Большое спасибо за любую помощь, которую вы можете оказать!

Пытался создать систему, которая бы каждый раз переименовывала имя изображения в число, чтобы я мог использовать идентификатор корабля для покупки нужного изображения.,Проблема была в том, что переменная сбрасывалась каждый раз при перезапуске сервера.Затем я попытался использовать обычную таблицу, созданную в базе данных, но не смог найти способ ее раскрыть (все учебники, которые я видел, были очень устаревшими, и это тоже выглядело не очень хорошо).

Это моеКод модели:

namespace Sailing.Models
{
public class Ships
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Captain { get; set; }
    public int Crew { get; set; }
    public string ImageName { set; get; }
}


public class CreateModel : PageModel
{
    private readonly SailingContext context;
    private readonly IHostingEnvironment hostingEnvironment;
    public CreateModel(SailingContext context, IHostingEnvironment environment)
    {
        this.hostingEnvironment = environment;
        this.context = context;
    }
    [BindProperty]
    public Ships Ship { set; get; }

    [BindProperty]
    public IFormFile Image { set; get; }

    public async Task<IActionResult> OnPostAsync()
    {
        if (!ModelState.IsValid)
            return Page();

        if (this.Image != null)
        {
            var fileName = GetUniqueName(this.Image.FileName);
            var uploads = Path.Combine(hostingEnvironment.WebRootPath, "uploads");
            var filePath = Path.Combine(uploads, fileName);
            this.Image.CopyTo(new FileStream(filePath, FileMode.Create));
            this.Ship.ImageName = fileName; // Set the file name
        }
        context.Ships.Add(this.Ship);
        await context.SaveChangesAsync();
        return RedirectToPage("ShipsList");
    }
    private string GetUniqueName(string fileName)
    {
        fileName = Path.GetFileName(fileName);
        return Path.GetFileNameWithoutExtension(fileName)
               + "_" + Guid.NewGuid().ToString().Substring(0, 4)
               + Path.GetExtension(fileName);
    }
}

}

Это мой код создания:

<div class="row">
<div class="col-md-4">
    <form asp-action="Create"  enctype="multipart/form-data">
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        ........................
        </div>
        <div>
            <input type="file" asp-for="Image" />
        </div>
        <div class="form-group">
            <input type="submit" value="Create" class="btn btn-primary" />
        </div>
    </form>
</div>

Ну, я ожидал, что IFormFile будет работать и показыватьизображение, но IFormFile Image не распознается, и я получаю сообщение об ошибке, если я соединю его с остальными свойствами, в которых говорится, что IFormFile не является допустимым типом.Как я написал здесь, после создания столбца с именем Image я получаю сообщение об ошибке:

Код серьезности Описание Код проекта Подавление строки файла Ошибка CS1061 «Корабли» не содержит определения «Изображение» и не доступноМожно найти метод расширения 'Image', принимающий первый аргумент типа 'Ships' (отсутствует директива using или ссылка на сборку?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...