更新/使用EF和MVC编辑表时所需的图像字段

时间:2015-04-26 09:10:48

标签: c# asp.net-mvc linq entity-framework razor

我在这里有一个令人困惑的问题。我正在用mvc创建一个博客。博客的Users可以Post一个博客。但是,我最近更改了Enitity Framework中的Post表,以包含上传Picture (varbinary(max))的功能。

我已经在用户Create帖子控制器操作中处理了这个问题,我可以成功上传并在用户Posts上显示图片。

但是,当管理员必须允许发布帖子(Simple Controller Scaffolding for Edit)时,我的问题就出现了。 (没有用户可以在没有批准的情况下发帖)为此,我在Post表中有一个名为Published (bit, not null)的字段。

当我尝试编辑用户的帖子以使用我的AdminController发布它时,我在保存更改时收到错误:

  

MyBlogger.Models.Post:图片字段是必需的。

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(Post post)
    {
        try
        {
            if (ModelState.IsValid)
            {
                db.Entry(post).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
        }

问题很难解决,因为在我的编辑视图中我只能说@Html.Picture(m => m.Picture)才能显示图片,我必须将字节转换为Base64并显示它我必须这样做:< / p>

src="@Html.Raw("data:image/jpeg;base64," + ViewBag.ImageToShow)" 

我的编辑操作中没有选项db.AddOrUpdate(post);我只有db.SaveChanges();

我只是简单地使用我的编辑操作

  

查找具有指定ID的帖子,更新其发布字段   特定帖子,将更改保存到数据库。

我不确定为什么抱怨说图片字段是必需的?它要么因为Picture字段的表条目设置为Not Null,要么因为它再次保存Post的所有表条目,这就会出现简单添加/更新的问题?

1 个答案:

答案 0 :(得分:1)

当您回发修改后的模型post时,模型绑定器无法再将您的图像绑定到Picture属性。如果要修改某些实体的属性,只需获取它并修改所需的属性并再次保存即可。

[HttpPost]
public ActionResult Edit(Post post)
{
    try
    {
        if (ModelState.IsValid)
        {
            Post oldPost = db.Posts.Find(post.id);
            oldPost.Published=post.Published;
            // repeat for others. 
            db.SaveChanges();
            return RedirectToAction("Index");
        }
    }
    catch (System.Data.Entity.Validation.DbEntityValidationException dbEx)
    {
       //
    }
}

但是如果你想修改Picture属性,你必须使用HttpPostedFileBase类来获取新图像并像上面一样保存它。