【问题标题】:Image Field required when updating/Editing a table with EF and MVC使用 EF 和 MVC 更新/编辑表时需要图像字段
【发布时间】:2015-04-26 09:10:47
【问题描述】:

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

我已经在 User Create Post 控制器操作中处理了这个问题,我可以成功上传并在用户 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 并显示它我必须这样做:

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

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

我只是用我的编辑操作做的就是

找到具有指定 Id 的帖子,更新该帖子的发布字段 具体帖子,将更改保存到数据库。

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

【问题讨论】:

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


    【解决方案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 类来获取新图像并像上面一样保存它。

    【讨论】:

    • 您已经在Create 操作中将图片添加到您的模型中。因此,当您在 edit 操作中再次获取它时,您的实体已经包含图片。
    猜你喜欢
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多