【发布时间】:2021-07-14 05:54:37
【问题描述】:
我想显示保存到数据库中的图像,我一直在寻找教程等等,但它们并没有太大帮助。我有一个 API 控制器,它由 MVC 视图及其各自的控制器使用。在视图中有一个显示文本的空间和图像应该放置的空间,图像在数据库中保存为varbinary类型,文本是varchar类型的字段。
我创建的模型:
public class ForumContentModel
{
//some other fields
//theme tables
public string Content { get; set; }
public byte[] ContentFile { get; set; } //this has the image
public string FileType { get; set; }//the ext type of the image
public string FileName { get; set; }//the name of the img
}
API 控制器:
[HttpGet]
[Route("watchPost/{IdPost}")]
public IActionResult verPost(int IdPost)
{
ForumContentModel forum = new ForumContentModel();//this model is used to "join" various
//models
//get the data from the different tables with the id sending from the MVC controller
var forumContent = db.Themes.Where(x => x.IdForo == IdPost).FirstOrDefault();
//Content data from the post
forum.Content = forumContent.Content;//the text part
forum.ContentFile = forumContent.ContentFile;//the image
return Ok(forum);
}
MVC 控制器:
[HttpGet]
public IActionResult watchPost(int Id)
{
ForumContentModel forumModel = new ForumContentModel();
using(var client = new HttpClient())
{
client.BaseAddress = new Uri("https://localhost:44325/api/Forum/");
var responseTask = client.GetAsync("watchPost/" + Id);
responseTask.Wait();
var result = responseTask.Result;
if(result.IsSuccessStatusCode)
{
var readTask = result.Content.ReadAsAsync<ForumContentModel>();
readTask.Wait();
forumModel = readTask.Result;
}
else
{
ModelState.AddModelError(string.Empty, "Server error");
}
}
return View(forumModel);
}
显示数据的视图:
<form asp-action="watchPost">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="row">
<div class="form-group col-8">
<!--Text content-->
<label asp-for="Content" class="control-label h2"></label>
<textarea rows="4" asp-for="Content" class="form-control border-0" readonly="readonly"></textarea>
<span asp-validation-for="Content" class="text-danger"></span>
</div>
<div class="form-group col-4">
<!--where the image should be desplayed-->
<img asp-for="<!--the route or the @Http.DisplayFor to bring the image?-->" alt="" class="img-fluid">
</div>
</div>
</form>
我真的不知道怎么做,我一直在看一些教程,几乎所有的教程都在img属性的源中放入了存储图像的文件夹的名称。
非常感谢任何帮助。
【问题讨论】:
-
只需使用 HttpHandler 作为图像的来源,从数据库中拉取图像并返回。
-
@DaleK,感谢您的评论,我正在这样做,但
@HttpHandler没有出现,它会引发错误。 -
然后将该代码与错误一起添加到您的问题中。
-
好吧,你建议使用
@HttpHandler作为图像的来源,我做了以下:<img src = "@HttpHandler ..." alt = "" class = "img-fluid">,但是在@HttpHandler中显示它在当前上下文中不存在。
标签: c# sql-server asp.net-mvc asp.net-core asp.net-core-webapi