.Net Core Proje Model Kaydetme
2 min readApr 19, 2023
Aşağıda görüldüğü üzere Proje isimli başlık ve resim içeren bir model yapısı var.
[Key]
public int Proje_Id { get; set; }
public string? Baslik { get; set; }
public string? Resim_Url { get; set; }
[NotMapped]
public IFormFile? Resim { get; set; }
Kullanıcı yeni bir Proje eklemek istediği zaman aşağıdaki gibi bir ekran verileri kullanıcıdan almamızı sağlıyor.
<form asp-controller="Proje" asp-action="ProjeEkle" enctype="multipart/form-data" method="post">
<div class="card-body ">
<div class="form-group">
<label for="projeEklemeBaslik">Proje Başlığı</label>
<input type="text" name="Baslik" class="form-control" id="projeEklemeBaslik" placeholder="Başlık">
@Html.ValidationMessageFor(x=>x.Aciklama,"",new { @class = "text-danger" })
</div>
<div class="form-group">
<label asp-for="Resim">Resim Linki</label>
<div class="custom-file">
<input asp-for="Resim" class="custom-file-input" id="customFile" accept=".png, .jpg, .jpeg" />
<label class="custom-file-label" for="customFile">Resim Seç</label>
</div>
<span asp-validation-for="Resim" class="text-danger"></span>
</div>
</div>
<div class="card-footer">
<a href="/Proje/Index/" class="btn btn-primary">Geri Dön</a>
<button type="submit" class="btn btn-success">Kaydet</button>
</div>
</form>
Ekleme işlemini gerçekleştiren Controller kod bölümü ise şöyle:
[HttpPost]
public IActionResult ProjeEkle(Proje proje)
{
if (validationResult.IsValid)
{
if (ModelState.IsValid)
{
string uniqueName = UploadFile(proje);
proje.Resim_Url = "Path-To-Folder" + uniqueName;
}
projeManager.AddT(proje);
return RedirectToAction("Index");
}
else
{
foreach (var item in validationResult.Errors)
{
ModelState.AddModelError(item.PropertyName, item.ErrorMessage);
}
}
return View();
}
Resim dosyası UploadFile metodu ile şu şekilde kaydediliyor:
private string UploadFile(Proje proje)
{
string uniqueName = null;
if (proje.Resim != null)
{
string uploadFolder = Path.Combine(webHostEnvironment.WebRootPath + "/Path-To-Folder/");
uniqueName = Guid.NewGuid().ToString() + "_" + proje.Resim.FileName;
string filePath = Path.Combine(uploadFolder, uniqueName);
using (var fileStream = new FileStream(filePath, FileMode.Create))
{
proje.Resim.CopyTo(fileStream);
}
}
return uniqueName;
}