在.net core 2.0中添加到数据库之前更改模型

时间:2018-05-08 13:20:46

标签: asp.net-core-mvc asp.net-core-2.0

我正在尝试为网站创建可更新的活动页面。事件可能有也可能没有图像。

在模型中,我只使用了一个名为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。

1 个答案:

答案 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();
            }