我在这里有一个令人困惑的问题。我正在用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的所有表条目,这就会出现简单添加/更新的问题?
答案 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
类来获取新图像并像上面一样保存它。