我正在尝试为网站创建可更新的活动页面。事件可能有也可能没有图像。
在模型中,我只使用了一个名为HasImage的bool - 如果这是真的,那么显示页面将显示一个名为[EventID] .jpg的图像
我认为这是最简单的方法。我添加了上传图像的代码,图片正确上传,但我无法弄清楚如何在创建表单中使用图像的存在来正确设置HasImage。
这是代码的简化版本......
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("ID,Date,Details,HasImage")] Events events, IFormFile file)
{
if (ModelState.IsValid)
{
string hasImage = file.Length > 0 ? "False" : "True";
ModelState.SetModelValue("events.HasImage", new ValueProviderResult(hasImage, CultureInfo.InvariantCulture));
// also tried but failed: events.HasImage=hasImage (where hasImage was a bool)
_context.Add(events);
await _context.SaveChangesAsync();
int NewID = cH_Events.ID;
var fileName = NewID + ".jpg";
if (file.Length > 0)
{
[upload stuff here]
}
return RedirectToAction(nameof(Index));
}
return View(Events);
}
NB HasImage未出现在表单上。无论我是否将其包含在绑定列表中,它都不起作用。我假设这是最好的方法。另一种方法是创建一个隐藏的表单变量并使用JavaScript。
答案 0 :(得分:0)
好的,经过一段曲折的试错过程后,我找到了解决方案。
我没有尝试在添加到数据库之前更改模型,而是发现可以正常添加到数据库,然后更改模型,然后更新更改。
这是一个有效的代码示例(我还将hasImage更改为ImageType,以便我可以使用不同的文件类型)
_context.Add(Events);
await _context.SaveChangesAsync();
int NewID = Events.ID;
if (file != null && file.Length > 0)
{
var fileType = System.IO.Path.GetExtension(file.FileName);
[upload image code]
cH_Events.ImageType = fileType;
await _context.SaveChangesAsync();
}