如何使用ASP.net MVC4与实体框架上传/显示图像
本文关键字:显示 图像 显示图 框架 实体 ASP 何使用 net MVC4 | 更新日期: 2023-09-27 18:06:21
我有一个像这样的数据模型
public class NewsItem
{
public virtual int Id { get; set; }
public virtual string NewsTitle { get; set; }
public virtual string NewsContent { get; set; }
public virtual byte[] NewsImage { get; set; }
public virtual DateTime DateAdded { get; set; }
public virtual bool IsLive { get; set; }
}
然后通过视图显示这些数据,如下所示:
@model BusinessObject.Domain.NewsItem
<div class="row-fluid">
<h3>
@Html.ValueFor(model => model.NewsTitle)
</h3>
<div class="span5">
<img src="~/Content/images/stock.jpg" />
</div>
<div class="span7">
<p>
@Html.ValueFor(model => model.DateAdded)
</p>
<p>
@Html.ValueFor(model => model.NewsContent)
</p>
</div>
</div>
然后在控制器中使用_db.SaveChanges()保存数据,如下所示:
[Authorize]
[HttpPost]
public ActionResult Create(CreateNewsViewModel input)
{
if (ModelState.IsValid)
{
var news = new NewsItem();
news.NewsTitle = input.nTitle;
news.NewsContent = input.nContent;
news.DateAdded = input.nDateAdded;
news.IsLive = input.nIsLive;
Mydb data = new Mydb();
data.NewsItems.Add(news);
data.SaveChanges();
return View("Index", data.NewsItems);
}
else
{
return View(input);
}
}
目前我没有图片上传位。我该怎么做呢?在我的数据库我有一个二进制字段,我的数据类型在我的对象是一个字节[]。但是我不知道我需要在哪里处理图片上传?
我需要一个单独的操作来返回视图吗?这方面的一些建议将是伟大的。
欢呼
您需要一个file类型的输入字段来从View上传,并需要一个WebImage的实例来处理上传的图像:
视图:
<input type="file" name="image" />
控制器:
WebImage image = WebImage.GetImageFromRequest();
byte[] toPutInDb = WebImage.GetBytes();
// ... put the byte array into the database
要显示数据库中的图像,您需要一个控制器Action,它从数据库中检索字节数组并返回FileAction。您可以通过在从数据库检索到的bytearray上实例化另一个WebImage实例来获得该图像(用于图像检索控制器操作):
WebImage image = new WebImage(byteArrayFromDb);
File(image.GetBytes(), "image/" + image.ImageFormat, image.FileName);
我会这样写:
在你的模型类中:
public class NewsItem
{
public virtual int Id { get; set; }
public virtual string NewsTitle { get; set; }
public virtual string NewsContent { get; set; }
public virtual string NewsImage { get; set; } //string instead of byte because you don't wanna store your whole image file in your database, but just the path of the image, and the image you will store in a folder somewhere on the server
public virtual DateTime DateAdded { get; set; }
public virtual bool IsLive { get; set; }
}
:
[Authorize]
[HttpPost]
public ActionResult Create(CreateNewsViewModel HttpPostedFileBase file)// add this
{
if (ModelState.IsValid)
{
if (file != null)
{
file.SaveAs(HttpContext.Server.MapPath("~/Images/") + file.FileName);
car.ImagePath = file.FileName;
}
// the rest of the code...
}
else
{
return View(input);
}
}
在你的视图中,你应该有:
上传:<input id="NewsImage" title="Upload a image" type="file" name="file" />
用于在foreach循环中显示
@Html.DisplayFor(modelItem => item.NewsImage)
不要忘记在Html.BeginForm
enctype = "multipart/form-data"
看看jquery文件上传器您可以找到它的示例代码
希望能有所帮助