ModelState 看不到值

问题描述 投票:0回答:1

在我的控制器中,我想更新图像模型中的 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);
}

问题是,这个值在调试器中不为空Debbuger

我需要做什么才能通过 ModelState 验证?我希望将图像添加为 base64

c# entity-framework asp.net-core model-view-controller model-binding
1个回答
0
投票

我可以在我这边重现您的问题。请参阅下面的屏幕截图。在我们将值设置为

Image.FileContent
之前,模型验证任务已经完成,我们可以看到它是错误的。

enter image description here

让我们看一下模型验证文档。它说

模型绑定和模型验证都发生在执行之前 控制器操作或 Razor Pages 处理程序方法。

所以我们必须确保

FileContent
属性可以为空,或者在post请求中,我们给出这个属性值。从.Net 6开始,我们将在cspro文件中包含
<Nullable>enable</Nullable>
,这样在我们的模型中,即使我们不给它一个
[Required]
属性,默认情况下它也将是不可为空的。这导致了我的无效错误。解决方案是让这个属性可以为空,这需要我们使用
public string? FileContent { get; set; }

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.