There is a problem here, the title and description are saving correctly in the SQL database, but it is sending the image file as null. I made some attempts in this way, but I did not get the result I wanted.
How can I print this?
My class:
public class Workplace
{
[Key]
[Column("WorkplaceId")]
public int WorkplaceId { get; set; }
[NotMapped]
[Column("WorkplaceThumbnailImage")]
public byte[]? WorkpaceThumbnailImage { get; set; }
[Column("WorkplaceTitle")]
public string? WorkplaceTite { get; set; }
[Column("WorkplaceExpanation")]
public string? WorkplaceExplanation { get; set; }
}
Controller post method:
WorkplaceManager workplaceManager = new WorkplaceManager(new EfWorkplaceRepository());
[AllowAnonymous]
[HttpPost]
public IActionResult Index(Workplace p)
{
Workplace workPlace = new Workplace();
MemoryStream memoryStream = new MemoryStream();
foreach (var file in Request.Form.Files)
{
p.WorkplaceTite = file.FileName;
file.CopyTo(memoryStream);
p.WorkpaceThumbnailImage = memoryStream.ToArray();
}
p.WorkpaceThumbnailImage = p.WorkpaceThumbnailImage;
p.WorkplaceTite = p.WorkplaceTite;
p.WorkplaceExplanation = p.WorkplaceExplanation;
workplaceManager.AddWorkplace(p);
_logger.LogWarning("Success");
return RedirectToAction("Index", "Home");
}
HTML:
@model EntityLayer.Concrete.Workplace;
@using (Html.BeginForm("Workplaces", "Home", FormMethod.Post, new { enctype = "multipart / form - data"}))
{
<div class="form-group col-md-12">
<label for="inputText">Add</label>
<input type="File" class="form-control" id="file" name="file1" multiple="multiple"
asp-controller="Home" @Html.DisplayFor(model => model.WorkpaceThumbnailImage) method="post"/>
</div>
}
My class:
public class Workplace
{
[Key]
[Column("WorkplaceId")]
public int WorkplaceId { get; set; }
[NotMapped]
[Column("WorkplaceThumbnailImage")]
public byte[]? WorkpaceThumbnailImage { get; set; }
[Column("WorkplaceTitle")]
public string? WorkplaceTite { get; set; }
[Column("WorkplaceExpanation")]
public string? WorkplaceExplanation { get; set; }
}
Controler post method:
WorkplaceManager workplaceManager = new WorkplaceManager(new EfWorkplaceRepository());
[AllowAnonymous]
[HttpPost]
public async Task<IActionResult> Index(Workplace p)
{
Workplace workPlace = new Workplace();
MemoryStream memoryStream = new MemoryStream();
foreach (IFormFile file in Request.Form.Files)
{
workPlace.WorkplaceTite = file.Name;
file.CopyToAsync(memoryStream);
p.WorkplaceThumbnailImage = memoryStream.ToArray();
workPlace.WorkplaceThumbnailImage = workPlace.WorkplaceThumbnailImage;
p.WorkplaceTite = p.WorkplaceTite;
p.WorkplaceExplanation = p.WorkplaceExplanation;
}
workplaceManager.AddWorkplace(p);
_logger.LogWarning("Success");
return RedirectToAction("Index", "Home");
}
Html:
@model EntityLayer.Concrete.Workplace;
@using (Html.BeginForm("Workplaces", "Home", FormMethod.Post, new { enctype = "multipart/form-data"}))
{
<div class="col-lg-5">
<div class="card text-white rounded-3 sm-3">
<button class="btn card text-white rounded-3" type="submit" asp-area="" id="create" asp-controller="Home" asp-action="Hairdresser" style="background-color: #5B2480;">Add</button>
</div>
</div>
}
This is how I edited the codes with your suggestions. It works flawlessly. Thanks to those who contributed. I realized that the problem is caused by missing resources and spaces in "BeginForm".