在我的控制器中,我想更新图像模型中的 FileContent。但 ModelState 说它是空的。
[HttpPost]
public async Task<IActionResult> AddImage([Bind("Id,Title,ImageFile, TradeId")] Image image)
{
// Sprawdź, czy plik został przesłany
if (image.ImageFile != null && image.ImageFile.Length > 0)
{
using var ms = new MemoryStream();
await image.ImageFile.CopyToAsync(ms);
byte[] fileBytes = ms.ToArray();
image.FileContent = Convert.ToBase64String(fileBytes);
}
else
{
ModelState.AddModelError("ImageFile", "Image file is required.");
return View(image); // Ponownie wyświetl formularz z błędem
}
if (ModelState.IsValid)
{
// insert record
_context.Add(image);
await _context.SaveChangesAsync();
return RedirectToAction("Details", "Trades", new {id = image.TradeId});
}
return View(image);
}
我需要做什么才能通过 ModelState 验证?我希望将图像添加为 base64
我可以在我这边重现您的问题。请参阅下面的屏幕截图。在我们将值设置为
Image.FileContent
之前,模型验证任务已经完成,我们可以看到它是错误的。
让我们看一下模型验证文档。它说
模型绑定和模型验证都发生在执行之前 控制器操作或 Razor Pages 处理程序方法。
所以我们必须确保
FileContent
属性可以为空,或者在post请求中,我们给出这个属性值。从.Net 6开始,我们将在cspro文件中包含<Nullable>enable</Nullable>
,这样在我们的模型中,即使我们不给它一个[Required]
属性,默认情况下它也将是不可为空的。这导致了我的无效错误。解决方案是让这个属性可以为空,这需要我们使用public string? FileContent { get; set; }
。