Итак, в прошлом месяце я изучал 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 или ссылка на сборку?)